素数发生器解释?

时间:2017-03-15 13:19:56

标签: python algorithm python-3.x math primes

我正在寻找一种生成素数的算法。我发现罗伯特威廉汉克斯完成了以下一个。它比其他算法更有效,更好,但我无法理解它背后的数学。

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数组与最终素数数组之间的关系是什么?

1 个答案:

答案 0 :(得分:5)

从数组中的 n True值开始,i枚举从3sqrt(n)的{​​{1}}步骤,如果 i 数组中的条目仍为2,则将True中的所有条目设置为i^2到{{1}的步骤(这些将是2*i)的倍数。

最后留在数组中的所有奇数False条目都是素数。

所有这些找到的数字和 2 都是 n 下面的所有素数。