除了众所周知的之外,找到所有小于 N 的素数的最快算法是什么:
什么是一些快速的 Python 实现(Vanilla、Numpy 等)?
def eratosthenes2(n):
multiples = set()
for i in range(2, n+1):
if i not in multiples:
yield i
multiples.update(range(i*i, n+1, i))
PS 创建这个问题的想法与不断涌现的新问题有关,即如何有效地实现查找所有小于 N 的素数。
作为答案,我决定比较这个问题的答案中的最佳实现并进行时间测量(为此,我使用了@jfs答案中的模块
reporttime:素数.py
时间测量:
打印输出:
带有结果的数据框:
日程:
对我所知的Vanilla Python中 Eratosthenes 筛的最快实现工作的分析,即 无需使用额外的模块。
(c) Bruno Astrolino E Silva - 我刚刚添加了调试信息:
50PS这个实现非常有效地使用切片,并且由于这一点,最小化了循环迭代的次数 - 在下面的例子中,只需要三个循环迭代就可以找到所有小于 的素数。输出
n=50:实际上,例如,直到 2000000 的所有素数之和的输出不到 0.01 秒,我编写了这段代码,实现了特定任务的 Eratosthenes 筛,但是在给定范围内查找素数是一个相当普遍的过程:
如果你需要一个
list素数列表进行进一步处理,那么你可以这样做,计算速度令人满意。该算法基于 2 个原则: 1. 如果一个数不能被先前的素数整除,则它是素数。2.一个合数在k / 2内有一个除数。这是我的解决方案: