簡體   English   中英

為什么我的質數測試儀的模數條件不起作用?

[英]Why is my modulo condition in my prime number tester not working?

我正在嘗試(但失敗)編寫一個簡單的函數來檢查數字是否為質數。 我遇到的問題是,當我獲得一條if語句時,無論輸入如何,它似乎都在做同樣的事情。 這是我的代碼:

def is_prime(x):
    if x >= 2:
        for i in range(2,x):
            if x % i != 0:    #if x / i remainder is anything other than 0
                print "1"
                break
            else:
                print "ok"
        else:
            print "2"
    else: print "3"

is_prime(13)

我認為問題出在哪里,是帶有注釋的行。 無論我使用什么整數作為參數,它都將打印“ 1”。 我很抱歉這可能是一個愚蠢的問題,我根本不是一個經驗豐富的程序員。

您的代碼實際上真的很接近功能。 您的條件中只有一個邏輯錯誤。

您可以對素數測試進行一些優化,例如僅檢查直到給定數字的平方根。

def is_prime(x):
    if x >= 2:
        for i in range(2,x):
            if x % i == 0: # <----- You need to be checking if it IS evenly
                print "not prime" # divisible and break if so since it means
                break             # the number cannot be prime
            else:
                print "ok"
        else:
            print "prime"
    else:
        print "not prime"

問題是這一行:

if x % i != 0: 

您正在測試x % i是否不為 0,這對於任何相對質數的整數都是正確的(因此,您總是將其打印出來)

它應該是:

if x % i == 0:

嘗試使用return語句代替(或除了)print語句,例如:

from math import sqrt # for a smaller range

def is_prime(x):
    if x <= 2:
        return True
    for i in range(2, int(sqrt(x)) + 1):
        if x % i == 0:
            print "%d is divisible by %d" % (x,i)
            return False
    return True    

is_prime(13)
True

is_prime(14)
14 is divisible by 2
False

這種檢查可以是單個表達式:

def is_prime(n):
    return n>1 and all(n%k for k in range(2,n//2))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM