- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
#include <iostream>
#include <cstdlib>
typedef unsigned long long int ULL;
ULL gcd(ULL a, ULL b)
{
for(; b >0 ;)
{
ULL rem = a % b;
a = b;
b = rem;
}
return a;
}
void pollard_rho(ULL n)
{
ULL i = 0,y,k,d;
ULL *x = new ULL[2*n];
x[0] = rand() % n;
y = x[0];
k = 2;
while(1){
i = i+1;
std::cout << x[i-1];
x[i] = (x[i-1]*x[i-1]-1)%n;
d = gcd(abs(y - x[i]),n);
if(d!= 1 && d!=n)
std::cout <<d<<std::endl;
if(i+1==k){
y = x[i];
k = 2*k;
}
}
}
int main()
{
srand(time(NULL));
pollard_rho(10);
}
此实现源自 CLRS 第 2 版(页码 894)。 while(1)
在我看来很可疑。 while 循环的终止条件应该是什么?
我试过了 k<=n
但这似乎不起作用。我得到段错误。代码中有什么缺陷以及如何更正它?
最佳答案
我只有第一版的 CLRS,但假设它与第二版没有太大区别,终止条件的答案在下一页:
This procedure for finding a factor may seem somewhat mysterious at first. Note, however, that POLLARD-RHO never prints an incorrect answer; any number it prints is a nontrivial divisor of n. POLLARD-RHO may not print anything at all, though; there is no guarantee that it will produce any results. We shall see, however, that there is good reason to expect POLLARD-RHO to print a factor of p of n after approximately sqrt(p) iterations of the while loop. Thus, if n is composite, we can expect this procedure to discover enough divisors to factor n completely after approximately n1/4 update, since every prime factor p of n except possibly the largest one is less than sqrt(n).
因此,从技术上讲,CLRS 中的表示没有终止条件(这可能就是为什么他们将其称为“启发式”和“过程”而不是“算法”的原因)并且无法保证它永远不会实际上产生任何有用的东西。在实践中,您可能希望根据预期的 n1/4 更新来限制一些迭代。
关于c++ - 这个 Pollard Rho 实现有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6040423/
因此,我尝试使用 BigInteger 类在 Java 中创建 Pollard 的 Rho 因子分解算法以支持非常大的整数。该代码大部分有效,但找不到 4 或 8(应该是 2)的因数。目前,我已将其限
我最近偶然发现了 a paper关于 Pollard's Rho algorithm 的并行化,考虑到我的具体应用,除了我没有达到所需的数学水平这一事实之外,我想知道这种特殊的并行化方法是否有助于我的
我实现了 wikipedia 上给出的 Pollard Rho 算法 x ← 2; y ← 2; d ← 1 while d = 1: x ← g(x) y ← g(g(y))
我正在尝试实现 Pollard 的 Rho 算法来查找整数 n 的因数。我有一个通常有效的实现,但现在遇到了一些问题。在这种情况下,我的 n = 262063。 这是我的 Rho 算法,以及引用的 g
我正在尝试根据我在维基百科上找到的伪代码来实现 Pollard Rho,但它似乎不适用于数字 4、8 和 25,而且我不知道为什么。 这是我的代码: long long x = initXY;
Pollard Rho factorization method uses a function generator f(x) = x^2-a(mod n) or f(x) = x^2+a(mod n
每次我使用 Pollard Rho 因式分解方法对一个数进行因式分解时,是否有必要在 Pollard Rho 因式分解之前检查其素数?如果是,那么每次我想对任何数字进行因式分解时,我都必须实现 Mil
我正在尝试在 C/C++ 中实现 Pollard Rho 整数分解。Google 为我提供了问题的 Java 实现 here . 我不太了解 Java,所以我想出了什么 this .我在 C++ 中的
我正在尝试在 Python 中实现 Pollard 的 P-1 分解。请注意,Rho 方法有一些答案,但这个 p-1 是不同的,关于 p-1,我能给你的最好的是 wiki 和 Wolfram: htt
#include #include typedef unsigned long long int ULL; ULL gcd(ULL a, ULL b) { for(; b >0 ;)
为了尝试解决 Euler 项目的第三个问题 (https://projecteuler.net/problem=3),我决定实现 Pollard 的 Rho 算法(至少是其中的一部分,我计划稍后包括循
我有以下功能。我从两个站点获得它并尝试将其改编成我自己的,但效果不佳。 当我测试 unsigned long int max - 2 或 to 但它作为一个数字 4294967293 时,它会将以下代
我正在用 C 语言编写来自 wiki 的 Pollard's rho 算法,即用于对数的 Pollard's rho 算法。但我有一个我不知道的运行时错误。我认为这可能是来自指针。你能发现错误吗? #
谁能帮我解决 pollard rho 的实现问题?我已经在 C 中实现了它。它可以很好地处理最多 10 位数字,但无法处理更大的数字。 请帮助我改进它以进行最多 18 位数字的因式分解。我的密码是 t
我正在尝试根据书中的描述实现 Pollard 的 rho 算法来计算离散对数 Prime Numbers: A Computational Perspective作者:Richard Crandall
我正在尝试实现 Pollard Rho Haskell 中的因式分解方法。这是我的目的 func :: Int -> Int -> Int func x n = mod ( x * x - 1) n
下面是我对质因数分解的 Pollard rho 算法的实现: #include #include #include // Interface to the GMP random number f
我不知道我在尝试使用 Pollard 的 rho 算法计算质因数分解时哪里做错了。 #include #define f(x) x*x-1 int pollard( int ); int gcd(
这是用于计算取自 CLRS 的整数因式分解的伪代码。但是计算Line 8中涉及的GCD有什么意义,当i == k时需要doubling k> 在第 13 行。?请帮忙。 最佳答案 尽管有标签,但该伪代
这段代码是用 C 语言根据 pollard 的对数 rho 算法(来自 wiki)编写的。在此代码中,如果我输入 alpha=2、beta=5、N=1019,则必须返回 a=681、b=378、A=3
我是一名优秀的程序员,十分优秀!