为什么质数测试仪的模条件不起作用?

2024-03-29 12:52:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试(并且失败)编写一个简单的函数,检查数字是否为素数。我遇到的问题是,当我得到一个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”,而不管我用作参数的整数是什么。我很抱歉,这可能是个愚蠢的问题,我根本不是一个经验丰富的程序员。


Tags: 函数代码inforifisdefrange
3条回答

问题是这条线:

if x % i != 0: 

您正在测试x % i是否为而不是0,这对于任何一对相对素数的整数都是正确的(因此,您总是将其打印出来)

它应该是:

^{pr2}$

这种检查可以是单个表达式:

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

你的代码实际上已经接近功能性了。你的条件有一个逻辑错误。在

您可以对primality test进行一些优化,比如只检查给定数字的平方根。在

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"

相关问题 更多 >