找到前n个素数?

时间:2011-02-06 05:28:18

标签: python math performance primes

  

可能重复:
  Fastest way to list all primes below N in python

虽然我已经编写了一个函数来查找n(primes(10) -> [2, 3, 5, 7])下的所有素数,但我很难找到快速查找前n个素数的方法。最快的方法是什么?

5 个答案:

答案 0 :(得分:6)

从估算g(n) = n log n + n log log n *开始,估算n的第n个素数的大小> 5。

然后对该估计进行筛选。 g(n)给出了高估,这是可以的,因为我们可以简单地丢弃生成的额外素数,这些素数大于期望的n。

然后考虑“Fastest way to list all primes below N in python”中的答案。

如果您担心代码的实际运行时间(而不是算法时间复杂度的数量级),请考虑使用其中一个使用numpy的解决方案(而不是其中一个“纯python”解决方案) )。

*当我写log时,我的意思是自然对数。

答案 1 :(得分:4)

根据this,第n个素数p_n满足

  

p_n< n ln(n)+ n ln(ln(n))

对于n> = 6

因此,如果您使用大于上方右侧的下一个整数运行当前函数(或者,例如,其他答案中提到的一个筛子),则可以保证找到第n个素数。

答案 2 :(得分:2)

您需要Sieve of Eratosthenes

使用π函数估算您想要查看的 n 的值,略微超调,然后使用筛子计算到您需要的点。

答案 3 :(得分:0)

我不知道它是否最快但Euler's Sieve似乎不错。

修改

正如其他答案所暗示的那样,你可以使用素数定理2的基本事实。或者您可以学习基本的代数几何,并使用椭圆曲线素数测试。

答案 4 :(得分:0)

使用Eratosthenes的筛子,使用素数在2和3之后的形式为6n + 1或6n-1这一事实。这将提高程序的速度