- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试实现 Pollard 的 Rho 算法来查找整数 n 的因数。我有一个通常有效的实现,但现在遇到了一些问题。在这种情况下,我的 n = 262063。
这是我的 Rho 算法,以及引用的 getGCD()
和 pollardRhoFunction()
[我保留了 println,以便之后提供结果]:
public static int pollardRho(int n, int xStart){
// the function we will be using is f(x)=x^2+1, as per our textbook,
// (in question# 5.26)
int x = xStart;
int xPrime = pollardRhoFunction(x) % n;
int p = getGCD(x-xPrime, n);
int nmbr = 0;
System.out.println("x="+x);
System.out.println("xPrime="+xPrime);
System.out.println("p"+p);
while (p == 1||p==31313||p==20||p==75||p==25||p == n ||p==262063){
System.out.println("i="+nmbr);
x = pollardRhoFunction(x) % n;
xPrime = pollardRhoFunction(xPrime) % n;
System.out.println("xPrime="+xPrime);
xPrime = pollardRhoFunction(xPrime) % n;
System.out.println("xPrime="+xPrime);
p = getGCD(x-xPrime, n);
nmbr++;
}
updateIterNmbrs(nmbr);
if (p == n){
return -1;
}
else{
return p;
}
}
public static int getGCD(int a, int b){
int a_0 = a;
int b_0 = b;
int q = (int)Math.floor(a_0/b_0);
int r = a_0 - q*b_0;
while (r > 0){
a_0 = b_0;
b_0 = r;
q = (int)Math.floor(a_0/b_0);
r = a_0 - q*b_0;
}
r = b_0;
return r;
}
public static int pollardRhoFunction(int x){
// the function we will be using is f(x)=x^2+1, as per our textbook,
// (in question# 5.26)
int result = (int)Math.pow(x,2)+2;
//System.out.println("x^2+1="+result);
return result;
}
一段时间后,它陷入了一个循环。这是 System.out.println() 的(一些)打印输出:
x=1
xPrime=3
p262063
i=0
x=3
xPrime=11
xPrime=123
r= -120; a_0= -120; b_0= 262063
p262063
i=1
x=11
xPrime=15131
xPrime=166164
r= -166153; a_0= -166153; b_0= 262063
p262063
i=2
x=123
xPrime=-139425
xPrime=-139425
r= 139548; a_0= 139548; b_0= 262063
r= 122515; a_0= 262063; b_0= 139548
r= 17033; a_0= 139548; b_0= 122515
r= 3284; a_0= 122515; b_0= 17033
r= 613; a_0= 17033; b_0= 3284
r= 219; a_0= 3284; b_0= 613
r= 175; a_0= 613; b_0= 219
r= 44; a_0= 219; b_0= 175
r= 43; a_0= 175; b_0= 44
r= 1; a_0= 44; b_0= 43
r= 0; a_0= 43; b_0= 1
p1
i=3
x=15131
xPrime=-139425
xPrime=-139425
r= 154556; a_0= 154556; b_0= 262063
r= 107507; a_0= 262063; b_0= 154556
r= 47049; a_0= 154556; b_0= 107507
r= 13409; a_0= 107507; b_0= 47049
r= 6822; a_0= 47049; b_0= 13409
r= 6587; a_0= 13409; b_0= 6822
r= 235; a_0= 6822; b_0= 6587
r= 7; a_0= 6587; b_0= 235
r= 4; a_0= 235; b_0= 7
r= 3; a_0= 7; b_0= 4
r= 1; a_0= 4; b_0= 3
r= 0; a_0= 3; b_0= 1
p1
i=4
x=166164
xPrime=-139425
xPrime=-139425
r= 43526; a_0= 305589; b_0= 262063
r= 907; a_0= 262063; b_0= 43526
r= 897; a_0= 43526; b_0= 907
r= 10; a_0= 907; b_0= 897
r= 7; a_0= 897; b_0= 10
r= 3; a_0= 10; b_0= 7
r= 1; a_0= 7; b_0= 3
r= 0; a_0= 3; b_0= 1
p1
i=5
x=-139425
xPrime=-139425
xPrime=-139425
r= 0; a_0= 0; b_0= 262063
p262063
i=6
x=-139425
xPrime=-139425
xPrime=-139425
r= 0; a_0= 0; b_0= 262063
p262063
i=7
x=-139425
xPrime=-139425
xPrime=-139425
r= 0; a_0= 0; b_0= 262063
p262063
i=8
x=-139425
xPrime=-139425
xPrime=-139425
r= 0; a_0= 0; b_0= 262063
p262063
i=9
x=-139425
xPrime=-139425
xPrime=-139425
r= 0; a_0= 0; b_0= 262063
p262063
i=10
x=-139425
xPrime=-139425
xPrime=-139425
r= 0; a_0= 0; b_0= 262063
p262063
你明白了......出于某种原因它卡在了某个点......
最佳答案
您似乎在这一行中有错误:
int result = (int)Math.pow(x,2)+2;
应该这样读
int result = x*x + 1;
关于java - Pollard Rho 算法陷入循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24794308/
因此,我尝试使用 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
我是一名优秀的程序员,十分优秀!