2015-06-08 79 views
2

我在python上写了这段代码来解决项目欧拉问题#10,但我一直在等待15分钟(运行这段代码),它仍然没有结束。如何让python上的这段代码运行得更快?

请帮我改进此代码或优化它。

下面是摘录:

def prime (n): 
    f = 1 #flag 
    for i in range(2,n): 
    if n % i == 0: 
     f = 0 
    return f 

s = 0 # Sum 
for i in range(2,2000000): 
if prime(i) == 1: 
    s = i + s 
print s 
+2

你尝试[搜索一个有关Python和素数以前的答案](https://stackoverflow.com/search q =蟒蛇+黄金)? –

+3

嗯 - 最简单的事情是 - 你不必一直跑到n找出素数,sqrt(n)会使它跑得快得多。 – gabhijit

+2

@gabhijit立即返回将使它快得多:) – Alik

回答

4
import math 

def prime (n): 
    for i in xrange(2, int(math.sqrt(n))+1): 
     if n % i == 0: 
      return False 
    return True 

s = 2 # Sum 
for i in xrange(3,2000000, 2): 
    if prime(i): 
     s += i 
print s 

它运行在不到10秒了我。

首先,你想从prime返回,一旦你发现,一个数字是复合的。

其次,你不想检查偶数。与xrange(3,2000000, 2)

三跳过他们,就没有必要从2检查所有的数字都在nprime,因为a*b = b*a

由于您使用Python 2我把它换成rangexrange,这将是一点点更高效。

+0

伟大的答案比你..真实! –