【发布时间】:2018-07-08 05:26:36
【问题描述】:
这是我的代码:
import math
n=100
prime=[]
[prime.append(i) for i in range(2,n)]
i=2
"""for i in range(2,int(math.sqrt(n))):"""
while i*i <= n:
for j in range(2,n+1):
if i * j in prime:
prime.remove(i*j)
i +=1
print(prime)
现在这可行,但是当我将 n 从 100 更改为 10000 时,它会崩溃。我该如何固定它或者我应该使用发电机方式?谢谢。
【问题讨论】:
-
对于初学者,
[prime.append(i) for i in range(2,n)]列出了一个完全无用的[None, None,...]列表 -
将
prime变成set,这样可以加快速度。 -
或使用 Sieve of Erathostenes 算法。更快。
-
我尝试实现 Sieve of Eratosthenes 算法,但方式不同。我想我不能:)。我找到了一些更快的算法,但我想学习如何才能。谢谢大家。
标签: python python-3.x algorithm primes sieve-of-eratosthenes