import multiprocessing as mp
import os
"注:有些平台不支持"
def pi2(n): #一种筛选,n ,n 的方根地板,再方根地板 ...100w 24秒
s=int(n**.5)
if s>3:
if s%2==0:s=s-1
print('s#',s)
p=pi2(s)
else:
p=[2,3]
q=[]
q=[e for e in range(p[-1]+2,n+1,2)]
for k in p[1:]:
q=[e for e in q if e%k !=0]
return p+q
#========================== [a,b]集合 pair,一样是用a 淘选 b。
def fil(px):
for k in px[0]:
px[1]=[ e for e in px[1] if e % k !=0]
return px[1]
#=======================
#168,1229,9592,78498,664579
if __name__=='__main__':
n=20210907 #你的数字,100w以后耗时多。100w 6秒, kw 4分钟? 双核(1.66GHz)
r=int(n**.5)
s=[i for i in range (3,n+1,2)]
t=len(s)
m=[]
for ri in range(r):
m+=[s[ri*t :ri*t+t]]
m+=[s[r*t:]]
#--------------------------------准备 资料
plst =pi2(r)
ooo=[[plst,x] for x in m]
#------------------------------------并行处理
poo=mp.Pool(processes=4)
r=poo. map(fil,ooo)
# ---------------------------------------合并结果-------
rs=plst
for i in r:
rs+= i
print(len(rs)) #只看有多少质数
|