想知道为什么is_prime函数的结果不正确



def is_prime(x):
for i in range(2,x):
if (x % i) == 0:
return False
else:
return True
print(is_prime(9))

这是我查找素数的函数,我不确定为什么它总是为9返回True,有什么帮助和解释吗?感谢

要了解为什么会发生这种情况,请查看9传递到is_prime:时会发生什么

我们进入for循环,并将i的初始值设置为2。然后,9 % 2 = 1,而不是0,所以if条件失败了,我们转到else条件,然后它立即返回True:但这不是素性的定义。我们需要9不能被任何小于它的数整除(除了1(,而不是不能被单个数整除。因此,只有在检查了范围内的所有数字后,我们才能返回True,如下所示:

def is_prime(x):
for i in range(2,x):
if (x % i) == 0:
return False
return True

您的代码现在应该返回9的正确结果(并且,给定无限时间,任何大于1的自然数(。

有几件事需要考虑:你需要检查range(2, x)中的每个数字吗?也许你可以看看超过x的平方根会发生什么?此外,您可能需要检查数字是否小于2(即:1、0、-1、…(,因为目前,您的代码不会给出这些数字的正确结果。如果你也感兴趣,Eratosthenes筛是一种比试除法更好的算法,你可能想进一步研究它。

因为9%2是1,这就是True

以下是我如何修复你的代码

def is_prime(x):
for i in range(2,x):
if (x % i) == 0:
return False
print(is_prime(9))

然而,这并没有考虑到0和1。所以这里有一个更正确的

def is_prime(x):
if(x==0 or x==1):
return False
for i in range(2,x-1):
if (x % i) == 0:
return False
else:
return True
print(is_prime(9))

最新更新