2016-08-13 87 views
-4

下面的代碼不斷顯示素數的「不是素數」,對於非素數的數字,「素數不變」。我究竟做錯了什麼?確定數字是否爲素數

quuN = int(input("ENTER NUMBER : ")) 

quuM = 2 

if (quuN <= 0) : 

    print("ENTER NON-NEGATIVE NUMBER PLEASE") 


elif (quuN % quuM == 0) : 

    print(" IS PRIME ") 

else : 

    print("IS NOT PRIME ") 
+1

爲什麼你認爲這個代碼將準確確定一個數字是否是總理? – michaelrccurtis

+0

@michaelrccurtis以及我試圖在if語句中表示主要條件。所以如果_quuN_的mod被0除以_quuM_,那麼它就不是素數,因爲素數可以被1和它自己整除。 –

回答

0

的邏輯是不正確

素數(或素數)大於1,其具有比圖1和本身之外,沒有其他正除數的自然數。大於1的不是質數的自然數稱爲合數。

簡單的Python代碼下面

def is_prime(n): 
    for i in range(3, n): 
     if n % i == 0: 
      return False 
    return True 
+1

s_prime(4)將顯示爲True,但4不是素數。 for循環應該從2開始。 – warun26

0

上述代碼被檢查,如果一個數是偶數還是奇數。如果輸入質數,例如17,則代碼檢查17是否小於或等於0.然後,它檢查哪些評估值爲1,而不是0.因此,執行else塊,其打印不是PRIME

如果您輸入一個偶數,它會打印是PRIME。

此代碼檢查素數。

def is_prime(n): 
    import math 
    for i in range(2, int(math.sqrt(n))+1): 
     if n % i == 0: 
      return False 
    return True 
+0

爲什麼我需要嵌套if循環的for循環,如果我只需要知道輸入的一個數是否爲素數。 –

+0

素數(或素數)是大於1的自然數,除1和自身以外沒有正數除數。 for循環遍歷從2到自然數,直到n的平方根*檢查*如果這些數字中的任何一個實際上除以n。檢查[this](http://stackoverflow.com/questions/5811151/why-do-we-check-upto-the-square-root-of-a-prime-number-to-determine-if-it-is -pri)爲什麼我們使用平方根。 * if *條件有助於此檢查。 %操作檢查n和i的除法提醒是否爲0.如果它是0,那麼我除n和n不是素數。 – warun26

0

我假設你使用Python初學者,所以讓我指出來檢查數的素性在你的代碼邏輯是不正確的,你應該先仔細的primes numbers定義閱讀,當你這樣做,試着去了解這個小例子說明了如何檢查素數:

import math 

def is_prime_naive(number): 
    if number == 2: 
     return True 
    if number % 2 == 0: 
     return False 

    i = 3 
    sqrt_number = math.sqrt(number) 

    while i <= sqrt_number: 
     if number % i == 0: 
      return False 
     i = i+2 

    return True 

for i in range(2,101): 
    print "{0} {1} prime".format(i,"is" if is_prime_naive(i) else "is not") 

現在,請注意上面的代碼是最簡單的一個,但也是最慢的辦法來檢查一個數是否是質不是。當你熟悉素數的概念,那麼你應該檢查最快的方法來檢查素數,一些例子可能是費馬和米勒拉賓素數測試。所以,與黃金運氣,你一定會與他們樂趣;-)