如何用sympy求解给定范围内最大质数

img

如何用sympy求10的三次方到10的12次方内最大的质数 并记录对应质数从3~12每次求质数的时间 且如何调用cpu全部核心来加速求解

import multiprocessing as mp
import sympy
import time

def calc_primes(start, end, queue):
    max_prime = 0  # 初始化最大质数为0

    for i in range(start, end):
        if sympy.isprime(i):
            max_prime = i  # 如果i是质数,更新最大质数为i

    queue.put(max_prime)  # 将最大质数放入队列中

start_time = time.time()  # 记录开始时间

queue = mp.Queue()  # 创建队列用于保存每个进程计算出的最大质数

processes = []  # 存储每个进程对象

# 将循环拆分成4块分别分配给4个进程处理
for i in range(4):
    start = 10**9 * i + 1
    end = 10**9 * (i+1)
    p = mp.Process(target=calc_primes, args=(start, end, queue))
    processes.append(p)
    p.start()

# 等待所有进程完成任务
for p in processes:
    p.join()

max_prime = 0

# 从队列中取出各个进程计算出的最大质数并比较得出全局最大质数
while not queue.empty():
    prime = queue.get()
    if prime > max_prime:
        max_prime = prime

print(f"The largest prime number from 10^3 to 10^12 is {max_prime}")  # 输出最终结果
print(f"Time elapsed: {time.time() - start_time:.2f} seconds\n")  # 记录总的求解时间并输出