3
爲什麼第一個比第二個快得多?我認爲將素數存儲爲1和0比較簡單,但速度增加是荒謬的。最後,它仍然會經歷一個200萬個項目的列表,那麼它在編譯時需要多長時間才能完成呢?Eratosthenes的速度差異
def prime_sieve(limit):
primes = [1 for x in xrange(limit)]
primes[0] = 0
primes[1] = 0
imax = int(math.sqrt(limit) + 1)
i = 2
while (i < imax):
j = i + i
while j < limit:
primes[j] = 0
j += i
while True:
i += 1
if primes[i] == 1:
break
return primes
s = prime_sieve(2000000)
print(sum(i for i in xrange(len(s)) if s[i] == 1))
-----------------------------------------------------------
def sieve(max):
primes = range(2, max+1)
for i in primes:
j = 2
while i * j <= primes[-1]:
if i * j in primes:
primes.remove(i*j)
j += 1
return primes
count = 0
for x in sieve(2000000):
count += x
print count
這個問題似乎是脫離主題,因爲它屬於http://codereview.stackexchange.com – jonrsharpe
在兩個最外層的循環中添加一個'print i'併爲一些小輸入運行這兩個函數,比如'100'。看看在兩個功能中測試的數字! –
代碼中存在錯誤(除了函數'sieve'內的明顯錯誤縮進):從底部開始的第6行應該在與其上面的'if'相同的級別上縮進回去。 –