一尘不染

查找数的最大素数的算法

algorithm

计算数字最大素数的最佳方法是什么?

我认为最有效的方法如下:

  1. 找到可以清楚地划分的最低质数
  2. 检查除法结果是否为质数
  3. 如果没有,找到下一个最低的
  4. 转到2。

我基于此假设,因为它更容易计算出小的素因数。这是对的吗?我应该考虑其他什么方法?

编辑:我现在意识到,如果有两个以上素数在起作用,我的方法是徒劳的,因为当结果是另外两个素数的乘积时,步骤2失败了,因此需要递归算法。

再次编辑:现在我意识到它仍然可以工作,因为最后找到的质数必须是最高的质数,因此,对步骤2中非质数结果进行的任何进一步测试都将导致较小的质数。


阅读 232

收藏
2020-07-28

共1个答案

一尘不染

实际上,有几种更有效的方法来查找大数的因子(对于较小的数,审判分庭相当有效)。

如果输入数具有两个非常接近平方根的因子,那么一种非常快的方法称为Fermat因式分解。它利用恒等式N
=(a + b)(a-b)= a ^ 2-b ^ 2,并且易于理解和实现。不幸的是,它通常不是很快。

二次筛是最著名的分解100位数字的方法。另外,算法的一部分很容易通过并行处理完成。

我听说过的另一种算法是Pollard的Rho算法。它的效率一般不如Quadratic
Sieve,但似乎更容易实现。


一旦决定如何将数字分解为两个因子,这就是我能想到的最快的算法,可以找到一个最大的素数:

创建一个优先级队列,该队列最初存储数字本身。每次迭代时,您将从队列中删除最高编号,然后尝试将其分为两个因素(当然,不允许1成为这些因素之一)。如果此步骤失败,则该数字为素数,并且您有答案!否则,您将两个因素添加到队列中并重复。

2020-07-28