【发布时间】:2020-07-24 21:38:36
【问题描述】:
对于上下文,我正在尝试使用 Python 解决 Project Euler problem 3:
600851475143 的最大质因数是多少?
作为第一步,我正在尝试编写一个函数,该函数将一个数字是否为素数作为布尔值返回。我做了第一次尝试,并检查了以前是如何编写的。我最终得到了以下代码:
def isprime(x):
limit = x**0.5
i = 2
if x < 2:
return False
elif x == 2:
return True
else:
while i <= limit:
if x%i == 0:
return False
i = i + 1
else:
return True
由于某种原因,上面的代码不能完美运行。例如,isprime(99) 将返回 True。
请,有人可以帮我理解为什么这不起作用吗?我试图避免只是复制和粘贴别人的代码,因为我想确切地了解这里发生了什么。
对我来说,问题似乎出在最后的 else 声明上。我这样说是因为逻辑上写着“如果x%i == 0,这个数字不是素数”,但它没有明确说明如果没有x%i 迭代== 0 时该怎么做。
对此的任何帮助将不胜感激!我不一定要寻找最干净、最整洁的方式来做这件事,而更多的只是试图首先让这段代码工作。
【问题讨论】:
-
永远无法到达
i = i + 1行。 -
return立即结束函数,return之后的代码永远不会执行 -i = i + 1