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))