虽然我已经编写了一个函数来查找n(primes(10) -> [2, 3, 5, 7]
)下的所有素数,但我很难找到快速查找前n个素数的方法。最快的方法是什么?
答案 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)
使用π函数估算您想要查看的 n 的值,略微超调,然后使用筛子计算到您需要的点。
答案 3 :(得分:0)
答案 4 :(得分:0)
使用Eratosthenes的筛子,使用素数在2和3之后的形式为6n + 1或6n-1这一事实。这将提高程序的速度