2017-02-22 76 views
1

我寫試圖找到第一萬零一主要項目歐拉的問題7的程序。我改編了一個我已經有的發現所有素數的劇本。它運行良好。但現在我有一個問題。我的代碼重複列表。爲什麼我的程序重複打印列表?

881, 883, 887, 1, 2, 3, 5, 7, 11, 13, 17, 19 

這大致來自我的代碼中間。

max = int(input("What is your max no?: ")) 
primeList = [] 

while len(primeList) <= 10001: 
for x in range(1, max + 1): 
    isPrime = True 
    for y in range (2 , int(x ** 0.5) + 1): 
     if x % y == 0: 
      isPrime = False 
      break 

    if isPrime: 
     primeList.append(x) 


print(primeList) 

這是什麼原因造成的?我應該從一個空白的畫布開始,而不是編輯一箇舊的腳本?

+3

我覺得你的縮進是壞在這裏... –

+0

您還對突變列表,當你使用它作爲while循環中的一個條件來檢查。這將產生消歧,從而產生結果。 – kaushik94

+0

對不起,我不習慣堆棧溢出代碼塊功能。在Python –

回答

1

對於它的樂趣我也解決了這個問題:

# Test only odd numbers because we know the only even prime is 2 
oddprimes = [3] 
n = 3 
# when we have 10000 oddprimes we will have a total of 10001 primes: [2] + oddprimes 
while len(oddprimes) < 10000: 
    n += 2 # advance to the next odd number 
    maxfactor = int(n ** 0.5) + 1 
    # only need to check prime factors 
    for prime in oddprimes: 
     if n % prime == 0: 
      # it's not prime, stop looking 
      break 
     elif prime >= maxfactor: 
      # if we're checking prime factors >= sqrt(n)+1 then it's prime 
      oddprimes.append(n) 
      break 

print oddprimes[-1] # the 10000th odd prime which is the 10001st prime 
0

每次你找到一個黃金nuember將其添加到primeList,所以最後一行被要求打印的清單。如果你想最終的元素你可以:

print primeList[-1] 
相關問題