
如何用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") # 记录总的求解时间并输出