Python素数检查器素数的乘积

Python素数检查器素数的乘积,python,primes,Python,Primes,我编写了以下代码来检查一个数字是否为素数。虽然有更有效的方法可以做到这一点,但我确实注意到,虽然这对最大的素数有效,但对素数的每一个乘积都无效。因此,虽然它正确地将13和17识别为素数,但它也将91(13×7)识别为素数。你知道为什么吗 def checkifprime(numtocheck): for x in range(2,numtocheck): if(numtocheck % x == 0): return False r

我编写了以下代码来检查一个数字是否为素数。虽然有更有效的方法可以做到这一点,但我确实注意到,虽然这对最大的素数有效,但对素数的每一个乘积都无效。因此,虽然它正确地将13和17识别为素数,但它也将91(13×7)识别为素数。你知道为什么吗

def checkifprime(numtocheck):
    for x in range(2,numtocheck):
        if(numtocheck % x == 0):
            return False
        return True

answer = checkifprime(91)
print (answer)

返回True
缩进太远;它位于循环内部,导致函数在第一次迭代时退出,因此您的函数实际上只检查数字是否为奇数

def checkifprime(numtocheck):
    for x in range(2, numtocheck):
        if numtocheck % x == 0:
            return False
    return True

返回True
缩进太远;它位于循环内部,导致函数在第一次迭代时退出,因此您的函数实际上只检查数字是否为奇数

def checkifprime(numtocheck):
    for x in range(2, numtocheck):
        if numtocheck % x == 0:
            return False
    return True

您的程序永远不会超过第一次迭代。你实际上拥有的是一个偶数或奇数检查器。程序总是在循环的第一次迭代中返回。您返回
True
太早了。

您的程序永远不会超过第一次迭代。你实际上拥有的是一个偶数或奇数检查器。程序总是在循环的第一次迭代中返回。您返回
True
太早。

返回True语句的缩进不正确-您已将其放入
for
循环中。因此,循环以
2
开始,如果数字为奇数,则不输入
if
,然后返回
True
。您应该将此语句置于
for
循环的
之后。只有循环结束后,如果没有找到任何合适的除数,才能返回该数字为素数:

def checkifprime(numtocheck):
    for x in range(2,numtocheck):
        if(numtocheck % x == 0):
            return False
    return True # Note the indendation

return True
语句没有正确缩进-您已将其放置在
for
循环中。因此,循环以
2
开始,如果数字为奇数,则不输入
if
,然后返回
True
。您应该将此语句置于
for
循环的
之后。只有循环结束后,如果没有找到任何合适的除数,才能返回该数字为素数:

def checkifprime(numtocheck):
    for x in range(2,numtocheck):
        if(numtocheck % x == 0):
            return False
    return True # Note the indendation

你只需要检查给定数字的(~平方根+1)以内的数字。检查循环外的偶数,然后只需检查奇数:3、5、7、9。。。在你的循环中。正如corn3lius所说,一旦你达到了数字的平方根,你就可以停止检查。你只需要检查一个给定数字的(~平方根+1)。检查循环外的偶数,然后你只需要检查奇数:3、5、7、9。。。在你的循环中。正如corn3lius所说,一旦达到数字的平方根,就可以停止检查。