2016-04-24 36 views
0

我已經做了一個素數查找器,你輸入一個數字,它告訴你天氣它是一個素數。Python素數查找器

while True: 
    p = int(input('Enter a number ')) 
    for d in range(2, p): 
     if p % d == 0: 
      print(p, "is not a prime number!", d,"*", p//d,"=",p) 
      break 
     else: 
      print(p, "is a prime number!") 
      break 

但是它顯示的數字顯然不是素數。我認爲它只是將它除以2,因爲我嘗試過的所有奇數都被輸出爲奇數。

任何人都可以幫助解決這個問題嗎?

+0

想一想 - 什麼時候你確定一個數字是素數?是否在你檢查過它是否可以被二整除之後? – jonrsharpe

+0

我認爲它只是將它除以2,因爲我嘗試過的所有奇數都被輸出爲奇數? – Avinash

+0

爲了表現,你可以在範圍(2,math.sqrt(p)+1)中使用'd':' –

回答

1

你必須檢查所有的數字,然後才能說它是素數。目前,您的循環會在第一次檢查時退出(d == 2),如果p % 2 == 0True返回False

你應該把else聲明在循環的末尾,就像這樣:

while True: 
    p = int(input('Enter a number ')) 
    for d in range(2, p): 
     if p % d == 0: 
      print(p, "is not a prime number!", d,"*", p//d,"=",p) 
      break 
    else: 
     print(p, "is a prime number!") 

else只有在循環不與break結束執行。這意味着如果沒有找到任何分頻器,您的號碼就是最好的。

此外,請注意,您不必檢查號碼,直到p,您可以停止在sqrt(p)並重復兩個:for d in range(3, int(p**0.5) + 1, 2)

+0

謝謝你的工作完美,我不太清楚爲什麼我首先把代碼打破了。 :) – User592

+1

另外,你不需要檢查和'p'一樣高。只要在'範圍內(2,p ** 0.5 + 1):' – zondo

+0

@ User592',並且你應該測試2,然後只有奇數......不需要用'4,6,8, 10,...更多速度/想法見[Eratosthenes的素數比同時更快的順序?](http://stackoverflow.com/a/22477240/2521214) – Spektre