我正在寻找一种生成素数的算法。我找到了罗伯特·威廉·汉克斯 (Robert William Hanks) 创作的以下一幅作品。它非常有效并且比其他算法更好,但我无法理解其背后的数学原理。
def primes(n):
""" Returns a list of primes < n """
lis = [True] * n
for i in range(3,int(n**0.5)+1,2):
if lis[i]:
lis[i*i::2*i]=[False]*int((n-i*i-1)/(2*i)+1)
return [2] + [i for i in range(3,n,2) if lis[i]]
数组之间有什么关系True
s 值和最终的素数数组?
从...开始n True
数组中的值,其中i
枚举自3
to sqrt(n)
通过以下步骤2
,如果 i
数组中的第一项仍然是True
, 设置False
所有条目来自i^2
到数组的末尾,步骤为2*i
(这些都是i
).
All odd True
上面的条目1最后留在数组中的是素数。
所有由此找到的数字,以及2,是下面存在的所有素数n.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)