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,…),因为当前代码不会给出这些数字的正确结果。如果你也感兴趣的话,Sieve of Eratosthenes是一种比试除法更好的寻找素数的算法,你可能想进一步了解一下
因为
9%2
是1,那就是True
下面是我如何修复你的代码
但是,这并不考虑0和1。所以这里有一个更正确的答案
要理解为什么会发生这种情况,请看一下
9
被传递到is_prime
时会发生什么:我们输入for循环,并将
i
的初始值设置为2。然后,9 % 2 = 1
,而不是0,因此if条件失败,我们转到else
条件,然后立即返回True
:但这不是素性的定义。我们需要9不能被任何小于它的数整除(除了1),而不是不能被单个数整除。因此,我们只能在选中范围内的所有数字后返回True
,如下所示:您的代码现在应该返回9的正确结果(并且,给定无限时间,任何大于1的自然数)
需要考虑的几件事:是否需要检查
range(2, x)
中的每个数字?也许你可以看看x
的平方根之后发生了什么?此外,您可能需要检查数字是否小于2(即:1,0,-1,…),因为当前代码不会给出这些数字的正确结果。如果你也感兴趣的话,Sieve of Eratosthenes是一种比试除法更好的寻找素数的算法,你可能想进一步了解一下相关问题 更多 >
编程相关推荐