为什么质数检查器说 9 是质数?

Why does prime number checker say 9 is a prime number?

print "Type a number"
num = int(raw_input("> "))

if num % 2 == 0:
    print "This is not a prime number"

else:
    print "This is a prime number"

当我输入“9”时,它说这是一个素数,但事实并非如此:

Type a number
> 9
This is a prime number

我的代码是不是太简单了?有没有它不检查的东西?

您只是通过检查它是否可以被 2 整除来检查它是否为偶数。但是 9 可以被 3 整除,因此您还需要检查它。最简单的方法是检查所有数字直到您要检查素数的数字的平方根。

你在这里所做的只是检查一个数字是否可以被 2 整除。因为 9 / 2 = 4.5,它不能被 2 整除,因此转到 else 子句。

这是您可能想要的精简版本:

def is_prime(a):
    return all(a % i for i in xrange(2, a))

您正在检查给定数字是否为偶数,而 9 不是偶数,因此您的代码打印出来 "This is a prime number"

请查看 this Whosebug 问题,详细了解如何使用 Python 检查素数。

要检查数字是否为质数,您必须验证它是否可以被 [2, sqrt(n)] 范围内的任何数字所识别。

以下代码的作用完全相同:

import math

def is_prime(n):
    for i in range(2, int(math.sqrt(n))+1):
        if n % i == 0:
            return False
    return True

这种方法适用于小数,但如果 n 是真正的大数,那么您需要更快的方法。在这种情况下,您可以使用 Miller–Rabin primality 测试以一定的概率检查素数。