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

Python 为什么质数检查器说9是质数?,python,primes,Python,Primes,当我输入'9'时,它说这是一个素数,而不是: 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" 我的代码太简单了吗?有什么东西它不检查吗?你只检查它是否是偶数,检查它是否可以被2整除。但是9可以被3整除,所以你也需要检查一下。最简单的方法是检查所

当我输入'9'时,它说这是一个素数,而不是:

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"

我的代码太简单了吗?有什么东西它不检查吗?

你只检查它是否是偶数,检查它是否可以被2整除。但是9可以被3整除,所以你也需要检查一下。最简单的方法是检查所有数字,直到检查素数的平方根。

这里要做的就是检查一个数字是否能被2整除。因为9/2=4.5,它不能被2平均整除,所以就进入else子句

以下是您可能想要的内容的精简版:

Type a number
> 9
This is a prime number

您正在检查给定的数字是否为偶数,9是否为偶数,因此您的代码将打印出“这是一个素数”


有关如何使用Python检查素数的详细说明,请查看Stackoverflow问题。

要检查该数字是否为素数,您必须验证它是否可以由[2,sqrt(n)]范围内的任何数字设计

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

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

这种方法适用于小数值,但如果n是真正的大数值,则需要更快的速度。在这种情况下,您可以使用测试,它以一定的概率检查素数。

因为这不是质数检查器。你基本上是在检查偶数或奇数,9是奇数。你的程序会问“这个数字能被2整除吗?如果不能,它就是素数”。这就是为什么它把9算作素数。你的代码不检查素数,它检查一个数是偶数还是奇数。你的程序只检查输入的数是否可以被2整除。它实际上检查偶数。不是素数。为什么
int(math.sqrt(n))+1)
?range(x,y)返回间隔[x,y)(不包括y),但您还需要检查值sqrt(n),以便可以说range(x,y+1)现在y也将包含在验证中。但为什么要验证所讨论的数字的平方根呢?因为您不必验证从2到n的所有数字。如果n不是素数,并且其中一个除数大于sqrt(n),那么另一个除数更小,所以尝试从2到sqrt(n)的除数,您可能会找到所有n的除数(甚至比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