Python,素数检查器

时间:2013-10-15 15:27:47

标签: python numbers primes

嗨我正在制作一个功能,检查一个数字是否是素数,但它告诉我9是素数。

def eprimo(num):
    if num < 2:
        return False
    if num == 2:
        return True
    else:
        for div in range(2,num):
            if num % div == 0:
                return False
            else:
                return True

3 个答案:

答案 0 :(得分:6)

您的for循环在第一次迭代后立即退出时检查您的号码是否可以被2整除。如果您的号码是偶数,它将返回False;否则,它将返回True

解决方案不是立即返回True;等待循环中所有迭代的结束:

for div in range(2, num):
    if num % div == 0:
        return False
return True

或者,使用all()构造:

return all(num % div != 0 for div in range(2, num))

答案 1 :(得分:2)

无论你是否完成了检查,你都会从for循环的第一次迭代中返回。除非数字肯定不是素数,否则你不应该从循环内部返回。如果循环结束,请移除else并仅返回True

def eprimo(num):
    if num < 2:
        return False
    if num == 2:
        return True
    else:
        for div in range(2,num):
            if num % div == 0:
                return False
        return True

优化旁注:您实际上不需要检查所有除数候选者num。您只需要检查num的平方根。

答案 2 :(得分:0)

不是测试范围(2,num)中的所有除数,而是可以提取偶数的测试,然后仅对奇数进行循环。另外,正如比尔蜥蜴建议的那样,你可以停在num的平方根处。这将是原来的两倍:

def eprimo(num):
    if num < 2:
        return False
    if num % 2 == 0:
        return num == 2
    div = 3
    while div * div <= num:
        if num % div == 0:
            return False
        div += 2
    return True
相关问题