头歌python实训通关八——素数个数
第1关:使用进程池统计指定范围内的素数个数
任务描述
本关任务:编写程序,使用进程池统计指定范围内的素数个数。
相关知识
为了完成本关任务,你需要掌握:1.进程池,2.素性检测。
编程要求
根据提示,在右侧编辑器补充代码,输出指定范围内素数个数。
测试说明
平台会对你编写的代码进行测试:
测试输入: 2000 预期输出: 303
测试输入: 5000 预期输出: 669
import multiprocessing
import math
def is_prime(m):
"""
判断一个数m是不是素数
:param m: 正整数
"""
# 请在此处添加代码 #
# *************begin************#
if m <= 1:
return False
for j in range(2, int(math.sqrt(m)) + 1):
if m % j == 0:
return False
return True
# **************end*************#
def main(n):
"""
判断0~n之间素数的个数
:param m: 正整数
"""
# 请在此处添加代码 #
# *************begin************#
pools = multiprocessing.Pool(5)
print(sum(pools.map(is_prime, range(n))))
# **************end*************#
if __name__ == __main__:
n = int(input())
main(n)
第2关:使用ProcessPoolExecutor统计指定范围内的素数个数
任务描述
本关任务:编写程序,使用ProcessPoolExecutor并发统计指定范围内的素数个数。
相关知识
为了完成本关任务,你需要掌握:1.ProcessPoolExecutor 2.素性检测。
编程要求
根据提示,在右侧编辑器补充代码,输出指定范围内素数个数。
测试说明
平台会对你编写的代码进行测试:
测试输入: 2000 预期输出: 303
测试输入: 5000 预期输出: 669
import concurrent.futures
import math
def is_prime(m):
"""
判断一个数m是不是素数
:param m: 正整数
"""
# 请在此处添加代码 #
# *************begin************#
if m <= 1:
return False
for j in range(2, int(math.sqrt(m)) + 1):
if m % j == 0:
return False
return True
# **************end*************#
def main(n):
"""
判断0~n之间素数的个数
:param m: 正整数
"""
# 请在此处添加代码 #
# *************begin************#
with concurrent.futures.ProcessPoolExecutor() as pool:
print(sum(pool.map(is_prime, range(n))))
# **************end*************#
if __name__ == __main__:
n = int(input())
main(n)
下一篇:
Java获取实体类的属性名和属性值
