futursolo
2015-04-18 09:10:55 +08:00
使用生成器可以避免上面所说的内存不够用的情况。
这里给一个例子:(V2EX会把代码中的空格自动删掉,请自己补全)
import math
import time
def is_prime(number):
if number > 1:
if number == 2:
return True
if number % 2 == 0:
return False
for current in range(3, int(math.sqrt(number) + 1), 2):
if number % current == 0:
return False
return True
return False
def get_primes(number):
while True:
if is_prime(number):
yield number
number += 1
start = time.time()
prime = get_primes(1)
prime_sum = 0
while True:
this_prime = next(prime)
if this_prime <= 1000000:#改一下这里的数字
prime_sum += this_prime
else:
break
print("Result:" + str(prime_sum))
print ("Finished! Time Used: " + str(time.time() - start) + "s.")
至于楼上所说的筛法算素数的问题,可能也需要比较大的内存
(你还是要把已经算出来的素数保存起来,在这里暂时不用了)
这个是Python3的代码,Python2请自己改一下。
要想算的快一点,可以使用PyPy3。