头歌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)
经验分享 程序员 微信小程序 职场和发展