可能是重复:
Python中列出小于N的所有素数的最快方法
虽然我已经编写了一个函数来查找n以下的所有质数(primes(10) -> [2, 3, 5, 7]
),但我很难找到一种快速找到前n个质数的方法。这样做的最快方式是什么?
可能是重复:
Python中列出小于N的所有素数的最快方法
虽然我已经编写了一个函数来查找n以下的所有质数(primes(10) -> [2, 3, 5, 7]
),但我很难找到一种快速找到前n个质数的方法。这样做的最快方式是什么?
从估计值g(n) = n log n + n log log n
*开始,该估计值估计了n大于5时第n个素数的大小。
然后在该估计值上运行筛法。g(n)
给出了一个过高的估计值,这没关系,因为我们可以简单地丢弃生成的额外的大于所需n的素数。
然后考虑以下内容:“Fastest way to list all primes below N in python”中的答案。
如果您关心代码的实际运行时间(而不是算法的时间复杂度的数量级),请考虑使用其中一种使用numpy的解决方案(而不是其中一种“纯Python”解决方案)。
*当我写log
时,我指的是自然对数。
primes(int(pi*n))[:n]
只能返回小于12的正确质数个数。 - John Howardprimes(g(n))
。我不确定那是否是你的意思。在我的答案中,g(n)
函数出现了错误,请使用新函数再试一次。 - Olhovskyp_n < n ln(n) + n ln( ln(n) )
对于n >= 6
因此,如果您使用上述不等式右侧的下一个整数运行当前函数(或其他筛法),则可以保证找到第n个质数。
使用埃拉托色尼筛法,利用质数在2和3之后要么是6n+1的形式,要么是6n-1的形式。这将提高程序的速度。