Pollard-Rho分解并行化

时间:2011-09-24 17:08:56

标签: java parallel-processing factorization

我最近偶然发现a paper关于Pollard's Rho algorithm的并行化,并且根据我的具体应用,除了我没有达到所需的数学水平之外,我想知道是否这种特殊的并行化方法有助于我的具体案例。

我试图找到两个因素 - 半数 - 一个非常大的数字。基于我对该论文的了解很少,我的假设是,这种并行化在具有许多较小因子的数字上运行良好,而不是在两个非常大的因素上。

这是真的吗?我应该使用此并行化还是使用其他东西?我是否应该使用Pollard的Rho,还是更好地并行化不同的分解算法?

2 个答案:

答案 0 :(得分:6)

维基百科文章陈述了两个具体的例子:

Number                Original code      Brent's modification
18446744073709551617  26 ms              5 ms
10023859281455311421  109 ms             31 ms

首先,使用您的程序运行这两个并查看您的时间。如果它们与此类似(“硬”数字计算时间长4-6倍),请问问自己是否可以忍受这种情况。或者甚至更好,使用其他算法,如简单的经典“强力”分解,并查看它们给出的时间。我猜他们可能有一个很难的因素接近1,但绝对时间更差,所以这是一个简单的权衡。

旁注:当然,并行化是走到这里的方式,我想你知道,但我认为重要的是要强调。此外,它将有助于另一种方法在Pollard-rho时间之间(例如Pollard-Rho 5-31 ms,不同方法15-17 ms) - 在这种情况下,考虑运行2个算法在单独的线程中进行“分解竞赛”。

如果您还没有实际的算法实现,这里有Python implementations

答案 1 :(得分:4)

分解大整数的基本思想是使用各种方法,每种方法都有自己的优点和缺点。通常的计划是从初级试验师开始到1000或10000,然后是几百万Pollard rho步骤;应该得到大约十二位数的因子。此时,需要进行一些测试:数字是主要功率还是完美功率(对这些属性进行简单测试)。如果你还没有考虑这个数字,你知道它会很难,所以你需要重型工具。有用的下一步是Pollard的p-1方法,然后是它的近亲椭圆曲线方法。过了一段时间,如果不起作用,剩下的唯一方法是二次筛或数字筛,它们本质上是平行的。

您询问的并行rho方法今天没有被广泛使用。如你所知,Pollard rho更适合寻找小因素而不是大因素。对于半素数,最好在其中一个筛子上花费平行周期而不是Pollard rho。

我推荐mersenneforum.org上的保理论坛以获取更多信息。