功能测试不适用于所需的素数

时间:2014-11-19 12:03:56

标签: python python-2.7 primes

应该找出给定的输入是否是素数。

def is_prime(x):
    if x <= 1:
        return False
    elif x == 2 or x == 3:
        return True
    else:
        for n in range(2, x-1):
            if x % n == 0:
                return False
            else:
                return True

但是

is_prime(9)

True提交给False

我找不到错误,需要帮助。

1 个答案:

答案 0 :(得分:2)

当您找到不均匀划分True的因素时,您会返回x2不会将9分开,因此您返回True

>>> x = 9
>>> n = 2
>>> if x % n == 0:
...     print False
... else:
...     print True
... 
True

当您确定不存在任何因素时,您只需返回True,因此之外

for n in range(2, x-1):
    if x % n == 0:
        return False
return True

您最多不需要测试x - 1,测试最多int(x ** 0.5) + 1就足够了(直到平方根):

def is_prime(x):
    if x <= 1:
        return False
    if x in (2, 3):
        return True
    for n in range(2, int(x ** 0.5) + 1):
        if x % n == 0:
            return False
    return True