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

2024-06-02 07:44:02 发布

您现在位置:Python中文网/ 问答频道 /正文

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'时,它显示它是一个质数,但它不是:

^{pr2}$

我的代码太简单了吗?有什么东西没查到吗?在


Tags: numberinputraw键入ifistypenot
3条回答

为了检查这个数是否是素数,你必须验证它是否可以被[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检验,它以一定的概率检验素性。在

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

你要做的就是检查一个数是否可以被2整除。由于9/2=4.5,它不能被2整除,因此转到else子句。在

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

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

相关问题 更多 >