【发布时间】:2020-03-09 06:04:23
【问题描述】:
我试图了解用户对 Erastothene 的 Prime Seive 的实现;代码只有几行,但我很难理解它:
def eratos_sieve(n):
sieve = [True] * n
for i in range(3,int(n**0.5)+1,2):
if sieve[i]:
sieve[i*i::2*i]=[False]*((n-i*i-1)//(2*i)+1)
return len([2] + [i for i in range(3,n,2) if sieve[i]])
到目前为止,我的理解是:我们正在定义一个带有参数 n 的函数。我们首先假设 n 是素数。然后,由于某种原因,我们有一个带有 3 个参数的 for 循环!在那之后,如果声明,我完全迷失了。如果有人可以提供帮助,那就太好了!
【问题讨论】:
-
它首先假设直到
n的所有数字都是素数,然后将不是素数的数字标记为False。这就是筛子的工作原理。for循环通过从 3 开始步进 2 跳过偶数: [3, 5, 7, 9, ...] 第三个参数是步长。