【发布时间】:2018-03-14 18:39:42
【问题描述】:
对于较小的 n 值,该代码执行应该执行的操作,但我想计算所有低于 200 万的素数的总和,而这就是代码似乎花费了无穷无尽的时间的地方。我正在使用 PyScripter。有没有办法让这段代码更有效率?
def is_prime(a):
return all(a % i for i in range(2, a))
def sum_of_primes(n):
sum = 0
x = 2
while x < n:
if is_prime(x):
sum = sum + x
x = x+1
return sum
def main():
print(sum_of_primes(2000000))
if __name__ == '__main__':
main()
【问题讨论】:
-
您只需检查 a 的平方根即可开始。还可以考虑持有一组标志来标记素数
-
您在
x = x + 1中存在缩进问题。现在您的代码进入无限循环。 -
考虑寻找素数的
sieve of eratosthenes算法。
标签: python