python用多线程实现计算100000以内质数之和,将执行时间优化入0.1秒

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秒

image.png

最后编辑于:2024/04/10作者: 牛逼PHP

发表评论