python用多线程实现计算100000以内质数之和,将执行时间优化入0.1秒
from multiprocessing import Process from multiprocessing import Queue import time import math def zhishu(start, end, q): # print(start, end) prime_sum = 0 if start <= 2 < end: # 特判2为质数 prime_sum += 2 if start % 2 == 0: # 确保从下一个奇数开始检查 start += 1 for i in range(start, end, 2): # 只检查奇数 is_prime = True for j in range(3, int(math.sqrt(i)) + 1, 2): # 只检查到sqrt(i),并且只检查奇数 if i % j == 0: is_prime = False break if is_prime: prime_sum += i q.put(prime_sum) if __name__ == '__main__': q = Queue() start_time = time.time() jobs = [] target = 100000 cur = 2 step = 50000 while cur < target: jobs.append(Process(target=zhishu, args=(cur, min(cur + step, target), q))) cur += step for p in jobs: p.start() for p in jobs: p.join() sum = 0 for p in jobs: sum += q.get() end_time = time.time() print('共执行:', end_time - start_time, '秒') print('总和', sum)
执行时间被优化到了0.1秒
发表评论