计算数字最大素数的最佳方法是什么?
我认为最有效的方法如下:
我基于此假设,因为它更容易计算出小的素因数。这是对的吗?我应该考虑其他什么方法?
编辑:我现在意识到,如果有两个以上素数在起作用,我的方法是徒劳的,因为当结果是另外两个素数的乘积时,步骤2失败了,因此需要递归算法。
再次编辑:现在我意识到它仍然可以工作,因为最后找到的质数必须是最高的质数,因此,对步骤2中非质数结果进行的任何进一步测试都将导致较小的质数。
实际上,有几种更有效的方法来查找大数的因子(对于较小的数,审判分庭相当有效)。
如果输入数具有两个非常接近平方根的因子,那么一种非常快的方法称为Fermat因式分解。它利用恒等式N =(a + b)(a-b)= a ^ 2-b ^ 2,并且易于理解和实现。不幸的是,它通常不是很快。
二次筛是最著名的分解100位数字的方法。另外,算法的一部分很容易通过并行处理完成。
我听说过的另一种算法是Pollard的Rho算法。它的效率一般不如Quadratic Sieve,但似乎更容易实现。
一旦决定如何将数字分解为两个因子,这就是我能想到的最快的算法,可以找到一个最大的素数:
创建一个优先级队列,该队列最初存储数字本身。每次迭代时,您将从队列中删除最高编号,然后尝试将其分为两个因素(当然,不允许1成为这些因素之一)。如果此步骤失败,则该数字为素数,并且您有答案!否则,您将两个因素添加到队列中并重复。