我试图用Python2.7上的一个筛子得到所有质数的和。然而,当我运行这个程序时,我每次只得到0。 我不知道为什么会这样。在
import math,time
start=time.clock()
def primesieve(limit):
final=0
a=[True]*limit
a[0]=a[1]=False
for i,isprime in enumerate(a):
if isprime:
for n in xrange(i,limit,i):
a[n]=False
for i in xrange(limit):
if a[i]:
final=final+i
return final
print primesieve(2000000)
elapsed=time.clock()-start
print elapsed
看看这个相关的主题: Fastest way to list all primes below N 在8*10^8以下的最快筛子是由@Robert William Hanks编码的rwh峎u prime1
它应该是:
^{pr2}$或者,更有效地:
因为否则,当
i
实际上是一个素数时,就会将i
设置为非素数。 (筛子应该将i
的所有倍数标记为非素数,除了i
本身!)在请注意,您正在迭代所有的数字,直到
limit
,但是您可以在到达sqrt(limit)
之后安全地停止:takewhile
函数将在到达limit
的平方根后立即停止迭代。i*i
不会出错,因为它总是小于limit
。在在我的机器上,它的速度是迭代所有数字的两倍。在
相关问题 更多 >
编程相关推荐