素数检查功能不适用于负数

时间:2017-03-12 14:41:00

标签: python primes

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和所有负数都不是素数

3 个答案:

答案 0 :(得分:1)

它确实为我返回True。在你调用abs(x)之后检查x的值,它可能会有所帮助。

答案 1 :(得分:0)

对于我来说,它确实为负数返回True。

此外,您可以运行从2到x / 2的循环并降低复杂性。

答案 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)限制可以节省大量时间,单独处理偶数可以将混合输入的时间缩短一半。