【发布时间】:2014-04-15 20:16:21
【问题描述】:
我写了一段代码来使用 Eratosthenes 的筛子生成素数:
def prime_list(N):
p = 2
l = [x for x in range(p,N)]
new_l = [p]
while p**2 < N:
l = [l[x] for x in range(1,len(l)) if not l[x]%p == 0]
p = l[0]
new_l.append(p)
[l.insert(0,x) for x in new_l[len(new_l)-2::-1]]
return l
有人可以检查此代码是否正确吗?我认为这是因为它比我之前用来生成素数的代码要快得多:
for x in range(2,N):
for y in range(2,x):
if x%y == 0:
break
else:
print(x)
【问题讨论】:
-
...它给出了正确的答案吗?
-
是的,它确实给出了正确的答案
-
在 Python 中寻找素数方面没有比这个问题及其答案更好的权威了:stackoverflow.com/questions/2068372/…
-
如果你的代码有分裂,那么它就不是埃拉托色尼的筛子。见The Genuine Sieve of Eratosthenes
标签: python generator primes sieve-of-eratosthenes