2013-11-24 41 views
-1

我知道存在類似的問題,但我想知道特別是我的代碼有什麼問題。提前致謝!查找低於給定限制的質數總和

isum = 0 
l = list(range(2, uplim + 1)) 

while l != []: 
    isum += l[0] 
    temp = list(range(l[0], uplim + 1, l[0])) 
    l = list(set(l) - set(temp)) 

print(isum) 

說明:第一個循環執行將增加2(即在列表中的第一項),以總和變量和從列表中刪除的2的倍數。 3現在將成爲列表中的第一個術語,這將被添加到isum,然後是所有3的倍數被刪除。 5將成爲第一個任期(因爲4被刪除 - 是2的倍數)等。

+0

它不像你想要的那樣行事? –

+2

歡迎來到Stack Overflow!看起來你希望我們爲你寫一些代碼。 儘管許多用戶願意爲遇險的編碼人員編寫代碼,但他們通常僅在海報已嘗試自行解決問題時才提供幫助。 證明這一努力的一個好方法是包含迄今爲止編寫的代碼, 示例輸入(如果有的話),預期的輸出以及實際獲得的輸出(控制檯輸出,堆棧跟蹤,編譯器錯誤 - 無論什麼適用)。 您提供的細節越多,您可能收到的答案越多。檢查[常見問題]和[問] –

+0

它只是不輸出正確的答案:/ – NVH

回答

0

集合是無序的。代碼背後的想法是可以的,但將列表轉換爲集合會丟失訂購信息,並且轉換回列表會產生比隨機排序更糟糕的結果;即使在統計上,您也無法對此作出任何保證。 l的第一個元素不能保證是最低的,所以它不能保證成爲素數,所有的東西都會下地獄。

+0

謝謝,這解釋了很多! – NVH

相關問題