2017-03-12 1 views
-1
def is_prime(x): 
    x = abs(x) 
    if x == 0 or x == 1: 
     return False 
    elif x == 2: 
     return True 
    for i in range(2, x): 
     if x%i == 0: 
      return False 
    return True 

テスターは、上記のコードはx = -7のときtrueを返してはならないと述べています。 助けてください。 ありがとうございました:)負数に対して素数検査機能が動作しない

を**編集:**

イムそれがないだけで、任意の数が2未満(すなわち0、1、すべての負の数が素数でないことをどこか

+0

あなたのforループが範囲2からxまでであるため、-7では何も実行しません。素数の論理を改善してください。 –

+0

どういう意味ですか? 'is_prime(-7)'は 'True'を返します。 – janos

+0

Muhammadあなたはプログラムの2行目を忘れてしまった。コード読み取りを改善してください。 –

答えて

1

を読んで、とても残念私のためにTrueを返します。あなたが(x)が、それは多分に役立ちます。

+2

私は申し訳ありませんが、ちょうど2より小さい任意の数(つまり、0と1とすべての負の数は**プライム**ではありません) –

0

をそれは私のために負の数のためにTrueを返しん腹筋を呼び出した後、xの値を確認してください。

をもあなたに2からループを実行することができますx/2と複雑さを減らす。

0

マイPythonは良くありませんが、このようなものは、より良い動作するはず:

def is_prime(x): 
    # Handle 1, 0 and negatives. 
    if x < 2: 
     return False 
    # Handle even numbers. 
    elif x % 2 == 0: 
     return x == 2 
    # Test with odd divisors. 
    for i in range(3, sqrt(x), 2): 
     if x % i == 0: 
      return False 
    return True 

sqrt(x)制限は大きな時間の節約になり、別途偶数に対処することは十分に混合入力に時間を半減することができます。

関連する問題