繁体   English   中英

为什么质数检查器说 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))

要检查数字是否为素数,您必须验证它是否可以被范围 [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 素性检验,它以一定的概率检查素性。

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

请查看这个Stackoverflow 问题,详细了解如何使用 Python 检查素数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM