2016-11-16 26 views
-6
print "Type a number" 
num = int(raw_input("> ")) 

if num % 2 == 0: 
    print "This is not a prime number" 

else: 
    print "This is a prime number" 

當我輸入「9」它說,這是一個質數,它是不是:爲什麼素數檢測器說9是素數?

Type a number 
> 9 
This is a prime number 

是我的代碼太簡單了?有沒有檢查?

+1

因爲這不是質數檢查器。你基本上檢查偶數或奇數,而9是奇數。 – FatalError

+0

你的程序問「這個數字是否可以被2整除?如果不是,它就是首要的」。這就是爲什麼它以9爲主要原因。也許你可以看看[Eratosthenes的篩選器](https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes)爲一個簡單的主要檢查器? – Aurora0001

+0

您的代碼不會檢查素數,它會檢查數字是偶數還是奇數。 – user2393256

回答

2

若要檢查數字是否爲素數,您必須驗證它是否被範圍[2,sqrt(n)]中的任何數字隱藏。

以下代碼也完全一樣:

import math 

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

這種方法適合於小數目,但如果n是真正的大號碼,然後你需要的東西更快。在這種情況下,您可以使用Miller–Rabin primality測試,以一定的概率檢查素數。

+0

爲什麼'int(math.sqrt(n))+ 1)'? – javanewbie

+0

範圍(x,y)返回區間[x,y)(不包括y),但您還需要檢查值sqrt(n),以便您可以說範圍(x,y + 1),現在y也會包含在驗證中。 – neverwalkaloner

+0

但爲什麼問題的平方根? – javanewbie

4

你只是檢查它是否是偶數,通過檢查它是否可以被2整除。但是9可以被3整除,所以你也需要檢查它。最簡單的方法是檢查所有數字,直到檢查素數的數字的平方根。

3

你在這裏所做的只是檢查一個數是否可​​以被2整除。由於9/2 = 4.5,它不能被2整除,從而進入else子句。

這裏是你可能想什麼凝聚,工作版本:

def is_prime(a): 
    return all(a % i for i in xrange(2, a)) 
1

要檢查,如果給定的數字是偶數或沒有,9甚至沒有讓你的代碼打印出「這是一個素數「

請看看this關於如何使用Python檢查素數的詳細解釋的Stackoverflow問題。