擅长:python、mysql、java
<p>要理解为什么会发生这种情况,请看一下<code>9</code>被传递到<code>is_prime</code>时会发生什么:</p>
<p>我们输入for循环,并将<code>i</code>的初始值设置为2。然后,<code>9 % 2 = 1</code>,而不是0,因此if条件失败,我们转到<code>else</code>条件,然后立即返回<code>True</code>:但这不是素性的定义。我们需要9不能被任何小于它的数整除(除了1),而不是不能被单个数整除。因此,我们只能在选中范围内的所有数字后返回<code>True</code>,如下所示:</p>
<pre class="lang-py prettyprint-override"><code>def is_prime(x):
for i in range(2,x):
if (x % i) == 0:
return False
return True
</code></pre>
<p>您的代码现在应该返回9的正确结果(并且,给定无限时间,任何大于1的自然数)</p>
<p>需要考虑的几件事:是否需要检查<code>range(2, x)</code>中的每个数字?也许你可以看看<code>x</code>的平方根之后发生了什么?此外,您可能需要检查数字是否小于2(即:1,0,-1,…),因为当前代码不会给出这些数字的正确结果。如果你也感兴趣的话,<a href="https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes" rel="nofollow noreferrer">Sieve of Eratosthenes</a>是一种比试除法更好的寻找素数的算法,你可能想进一步了解一下</p>