擅长:python、mysql、java
<blockquote>
<p>now it takes 32.98 sec for it to finish. I'd love to see a faster
algorithm</p>
</blockquote>
<p>你应该用一个<em>筛的埃拉托斯烯</em>。忽略这一点,此返工应使您的时间少于10秒:</p>
<pre><code>def isPrime(number):
if number <= 2:
return number == 2
if number % 2 == 0:
return False
for divisor in range(3, int(number ** 0.5) + 1, 2):
if number % divisor == 0:
return False
return True
def sumOfPrimes(limit):
return sum(number for number in range(limit) if isPrime(number))
print(sumOfPrimes(2000000))
</code></pre>
<p>在<code>isPrime()</code>中将<em>偶数</em>作为特例处理,然后只处理<em>奇数</em>除数。使用<em>理解</em>或<em>生成器表达式</em>会将更多循环代码下推到<strong>C</strong>级别,通常会使您的速度更快一些。你知道吗</p>