擅长:python、mysql、java
<ol>
<li>您只需要测试奇数,但<code>2</code>除外,您可以在循环之前专门测试它。这不会改变复杂性,因为它是一个常数,但它将时间减少了一半</李>
<li>您应该只测试<code>math.sqrt(x)</code>以下的数字。这将最坏情况复杂性从O(n)更改为O(sqrt(n))</李>
<li>您应该在找到因子后立即停止,而不是创建所有<code>x % i</code>的列表。这提高了最佳案例的复杂性</李>
</ol>
<pre><code>import math
def is_prime(x):
'''
Function to check if a number is prime
'''
if x == 2:
return True
if x % 2 == 0:
return False
for i in range(3, int(math.sqrt(x))+1, 2):
if x % i == 0:
return False
return True
</code></pre>
<p>比检查所有奇数更好的是使用<a href="https://en.wikipedia.org/wiki/Sieve_of_Eratosthenes" rel="nofollow noreferrer">Sieve of Eratosthenes</a>只检查素数</p>