这几天需要了解遇到的内存使用过高,所以学习 高性能编程 一书,理解需要注意的地方。正好看到求解素数问题,尽管素数求解的方法很多。 但自己简单想了一下,也可以使用下面方法来作为示例。
import time
def get_primes(curr_n,curr_primes,max_value):
# 要求 curr_n为偶数
assert curr_n % 2 == 0
local_primes=[]
for i in range(curr_n+1,min(curr_n*curr_n,max_value),2):
flag_prime=True
for factor in curr_primes:
if i % factor == 0:
flag_prime=False
break
if flag_prime:
local_primes.append(i)
return local_primes
def get_primes_until_n(n):
init_primes=[2]
init_n=2
while init_n<n:
print(init_n)
init_primes+=get_primes(init_n,init_primes,n)
init_n=init_n*init_n
return init_primes
if __name__ == '__main__':
t1=time.time()
primes=get_primes_until_n(10000000)
# primes=get_primes_until_n(256)
print("Took:", time.time() - t1)
print(len(primes), primes[:10], primes[-10:])