2016-11-16 8 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を数える理由です。おそらくシンプルなプライマリチェッカーのために、[Sag of 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を除く)を返しますが、range(x、y + 1)と言うことができるように値sqrt(n)をチェックする必要があります。 – 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がそうであっても、あなたのコードは、これは、」出力しない場合はチェックしています素数 "

Pythonを使用して素数をチェックする方法の詳細については、this Stackoverflow質問をご覧ください。

関連する問題