2016-10-24 7 views
-1

こんにちは私は、数字が素数であるかどうかをチェックするためにこのプログラムを作成しました。それは動作しますが、何らかの理由で999が素数であると言います。私の間違いはどこですか。もし誰かが説明したら、それは素晴らしいことだろう。ありがとうございました!数字が素数であるかどうかをチェックするプログラム

number = raw_input('Enter a Number: ') 
nnumber = int(number) 
prime_range = range(2, nnumber) 

for x in prime_range: 

    if nnumber % x == 0: 
     print 'Not a Prime Number!' 
     break 

    else: 
     print 'Prime Number!' 
     break 
+1

をあなたのプログラムは、実際には偶数のためにテストしています。あなたはそれが奇妙なのでプライムとして宣言する9をテストすることによってこれを見ることができます。 – davejagoda

答えて

6

トレースしてください。 x2で始まり、次に999 % 2をテストします。 1なので、elseが実行され、 "素数!"印刷され、ループが抜けてしまいます。プログラムは終了する。

代わりに、「素数!」を印刷する必要があります。 xのすべての可能性をテストしたときに限ります。正確に何をしたい:それを行うための最も簡単な方法else:をインデント解除(およびそこbreakを削除)することです:forが破壊されるwithoout完了時に

for x in prime_range: 

    if nnumber % x == 0: 
     print 'Not a Prime Number!' 
     break 

else: 
    print 'Prime Number!' 

Pythonはforelseを実行します。

+0

素晴らしい点。 Elseはwhileループや例外処理など、Pythonの他の多くの状況でも使用できます。 http://python-notes.curiousefficiency.org/en/latest/python_concepts/break_else.htmlで詳細を読むことができます。 –

+0

ありがとうございました! :) –

+0

しかし、私のコードは他の整数のために働くのですか? –

1

数が素数である場合には、それは何の数が均等に1と自分自身以外にも、それを分割しないことを意味:

は、ここに私のプログラムです。つまり、数字がプライムであると言う前に、その下のすべての数字をチェックする必要があります。

コードでは、番号の大きさに関係なく、最初の繰り返しでループを終了します。

0

判定に問題があり、1になるか、または素数が単独で割り切れることがあります。あなたは裁判官が素数ではなく2つだけであると判断し、判定条件を実行するためにダブルループを使用する必要があります。

0

1回目の反復のみをチェックしています。それが素数であるかどうかにかかわらず、セクション「if」または「else」のいずれかが実行されてループが中断するため、ループからループが終了します。論理は、2から(数/ 2)までの全範囲を調べることであり、ある点で数を分割する場合、素数ではありません。ループ全体を反復した後にループが終了した場合は、素数になります。あなたは今それを行うことができることを願っています。ありがとう!

0

既存のコードは、入力した数値が2で割り切れてからループの途中で途切れた場合にのみテストされます。あなたはそれが素数ではないことが判明しない場合、すべての低い値と唯一の出口をチェックする必要があります。それは最初 `if`確認後` break`を呼び出すので、

number = raw_input('Enter a Number: ') 
nnumber = int(number) 
prime_range = range(2, nnumber) 

prime = True 

for x in prime_range: 
    if nnumber % x == 0: 
     prime = False 
     break 

if prime: 
    print 'Prime Number!' 
else: 
    print 'Not a Prime Number!' 
関連する問題