我試圖在python中實現sieve of eratosthenes,但是當試圖找到所有素數達到sqare根的例如779695003923747564589111193840021時,我得到一個錯誤,說range()的結果太多了項目。我的問題是,我如何避免這個問題,如果我用一個while循環實例化列表,我會得到一個錯誤,說我使用了太多的內存(甚至在它開始使用頁面文件之前),下面列出了兩個:超過python列表的大小
使用範圍()
maxnum = 39312312323123123
primes = []
seq = []
i = 0
seq = range(2,maxnum)
for i in seq:
mul = i * seq
for j in mul:
try:
seq.remove(j)
except:
pass
primes.append(i)
print primes
使用while:
maxnum = 39312312323123123
primes = []
seq = []
i = 0
while i < maxnum:
seq.append(i)
i+=1
for i in seq:
mul = i * seq
for j in mul:
try:
seq.remove(j)
except:
pass
primes.append(i)
print primes
是的,這是一個學校的任務,但我敢肯定,我們應該找出,因子779695003923747564589111193840021是非常困難的,而不使用像沃爾夫拉姆阿爾帕這樣的工具,但我想給它我最好的嘗試我的其他(當前)主要發現算法現在已經運行了22個小時而沒有給我我想要的。 – 2010-02-25 21:26:02
在這裏的筆記本電腦上輸入「factor(779695003923747564589111193840021)」到最大值,在大約3秒內產生:43 * 167 * 9059 * 1510775033423 * 7933407561613的輸出。我不認爲你會通過篩選沒有64位和大量的內存和時間來得到這兩個最大的那個。 OTOH是正確的? – phkahler 2010-02-25 21:51:28
'除了:pass'總是錯的。改用實際的異常('ValueError')。 – 2010-02-25 22:10:12