我在 python 上编写了这段代码来解决项目 Euler 问题 #10,但我已经等了 15 分钟(运行此代码),但它仍然没有结束。
请帮助我改进或优化此代码。
这是片段:
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
最佳答案
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)
第三,不需要检查prime
中从2
到n
的所有数字,因为a*b = b *a
由于您使用 Python 2,我已将 range
替换为 xrange
,它会更高效一些。
关于python - 如何让Python上的这段代码运行得更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30700339/