目录
第2关:使用ProcessPoolExecutor统计指定范围内的素数个数
第1关:使用进程池统计指定范围内的素数个数
import multiprocessing
import math
def is_prime(m):
"""
判断一个数m是不是素数
:param m: 正整数
"""
# 请在此处添加代码 #
# *************begin************#
if m <= 1: #如果m小于等于1,不是素数
return 0
for i in range(2,int(math.sqrt(m))+1):#方法优化:m=a*b,其中a,b必有一个是小于等于m的平方根
if m % i == 0: #m被i整除,不是素数
return 0
return 1
#m不被2-m的平方根中任何一个数整除,则是素数
# **************end*************#
def main(n):
"""
判断0~n之间素数的个数
:param m: 正整数
"""
# 请在此处添加代码 #
# *************begin************#
#创建进程池
with multiprocessing.Pool(4) as pool:
#方法异步调用
count = pool.map(is_prime,range(n))
print(sum(count))
# **************end*************#
if __name__ == '__main__':
n = int(input())
main(n)
第2关:使用ProcessPoolExecutor统计指定范围内的素数个数
import concurrent.futures
import math
def is_prime(m):
"""
判断一个数m是不是素数
:param m: 正整数
"""
# 请在此处添加代码 #
# *************begin************#
if m <=1 :
return 0
for i in range(2,int(math.sqrt(m))+1):
if m%i == 0:
return 0
return 1
# **************end*************#
def main(n):
"""
判断0~n之间素数的个数
:param m: 正整数
"""
# 请在此处添加代码 #
# *************begin************#
sum = 0
with concurrent.futures.ProcessPoolExecutor() as pool:
List = []
for i in range(n):
List.append(i)
for number,results in zip(List,pool.map(is_prime,List)):
sum+=results
print(sum)
# **************end*************#
if __name__ == '__main__':
n = int(input())
main(n)