- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
为了尝试解决 Euler 项目的第三个问题 (https://projecteuler.net/problem=3),我决定实现 Pollard 的 Rho 算法(至少是其中的一部分,我计划稍后包括循环)。奇怪的是它适用于以下数字:82123(因子 = 41)和 16843009(因子 257)。但是,当我尝试项目欧拉数:600851475143 时,当最大质因数为 6857 时,我最终得到 71。这是我的实现(对于代码墙和缺乏类型转换感到抱歉):
#include <iostream>
#include <math.h>
#include <vector>
using namespace std;
long long int gcd(long long int a,long long int b);
long long int f(long long int x);
int main()
{
long long int i, x, y, N, factor, iterations = 0, counter = 0;
vector<long long int>factors;
factor = 1;
x = 631;
N = 600851475143;
factors.push_back(x);
while (factor == 1)
{
y = f(x);
y = y % N;
factors.push_back(y);
cout << "\niteration" << iterations << ":\t";
i = 0;
while (factor == 1 && (i < factors.size() - 1))
{
factor = gcd(abs(factors.back() - factors[i]), N);
cout << factor << " ";
i++;
}
x = y;
//factor = 2;
iterations++;
}
system("PAUSE");
return 0;
}
long long int gcd(long long int a, long long int b)
{
long long int remainder;
do
{
remainder = a % b;
a = b;
b = remainder;
} while (remainder != 0);
return a;
}
long long int f(long long int x)
{
//x = x*x * 1024 + 32767;
x = x*x + 1;
return x;
}
最佳答案
Pollard 的 rho 算法不提供任何保证。它不能保证找到最大的因素。它不保证它找到的任何因子都是质数。它甚至不能保证找到一个因素。 rho 算法是概率性的;它可能会找到一个因素,但不一定。由于您的函数返回一个因子,因此它有效。
也就是说,您的实现不是很好。没有必要存储函数的所有先前值,并在每次循环中计算 gcd。这是该函数更好版本的伪代码:
function rho(n)
for c from 1 to infinity
h, t := 1, 1
repeat
h := (h*h+c) % n # the hare runs ...
h := (h*h+c) % n # ... twice as fast
t := (t*t+c) % n # as the tortoise
g := gcd(t-h, n)
while g == 1
if g < n then return g
此函数返回 n 的单个因子,它可以是素数或合数。它仅存储随机序列的两个值,并在找到循环时停止(当 g == n 时),并以不同的随机序列重新启动(通过递增 c)。否则它会一直运行直到找到一个因子,只要您将输入限制为 64 位整数,它就不会花费太长时间。通过将 rho 应用于剩余的辅因子来查找更多因子,或者如果找到的因子是复合因子,则在找到所有主要因子后停止。
顺便说一句,您不需要 Pollard 的 rho 算法来解决欧拉计划 #3;简单的试验划分就足够了。该算法找到一个数的所有质因数,您可以从中提取最大的质因数:
function factors(n)
f := 2
while f * f <= n
while n % f == 0
print f
n := n / f
f := f + 1
if n > 1 then print n
关于algorithm - 另一个 Pollard Rho 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31734222/
我正在尝试使用 Pandas 读取带分隔符的文件。分隔符是希腊字符,小写 rho (þ)。 我正在努力定义正确的 read_table 参数,以便正确格式化生成的数据框。 有没有人对此有任何经验或建议
这是我为图像中的线条创建hough 累加器 的代码: void hough_lines_acc(cv::Mat img_a_edges, std::vector > &hough_acc) { f
因此,我尝试使用 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
我在 Saurabh Kr Vats 在此 http://www.careercup.com/question?id=14990323 上提出的解决方案中遇到了这个问题 他说: # Finally,
我正在尝试根据我在维基百科上找到的伪代码来实现 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++ 中的
已创建 Hough 变换的 C++ 实现,用于检测图像中的线条。找到的线使用 rho、theta 表示,如维基百科上所述: "The parameter r represents the distan
我想将方法2、3、4的排名结果与方法1进行比较。在这方面,我想使用Spearman Rho系数。我还想知道方法2、3、4的结果与方法1是否有显着关系。那么该怎么做呢? database datab
我想将方法2、3、4的排名结果与方法1进行比较。在这方面,我想使用Spearman Rho系数。我还想知道方法2、3、4的结果与方法1是否有显着关系。那么该怎么做呢? database datab
我使用 Keras 框架来实现循环神经网络。我在优化器(RMSprop)参数中找到了 RHO 参数,并且我知道它是超参数,但我找不到该参数的描述。 RHO是什么意思? 文档链接 https://ker
#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 时,它会将以下代
我对生成相关随机变量有疑问...有没有一种方法可以生成 x1(0, 1)、x2(0, 1),它们通常具有 rho = 0;或生成x3(0, 1), x4(0, 1) 有 rho = 0.75 还是其他
我试图将新的 RHO 单应性算法与 perspectiveTransform 结合使用,但似乎 RHO 计算的单应性矩阵大小错误,因此与该方法不兼容。 见下面的代码: H = findHomograp
我是一名优秀的程序员,十分优秀!