11.编写程序,使用进程池Pool并行判断100000以内的正整数是否是素数,并统计素数的个数。
时间: 2024-03-14 08:46:06 浏览: 22
下面是使用进程池并行判断100000以内的正整数是否是素数的示例代码:
```python
import math
import time
from multiprocessing import Pool
def is_prime(n):
if n <= 1:
return False
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
return True
if __name__ == '__main__':
start = time.time()
with Pool(4) as p:
nums = range(1, 100001)
results = p.map(is_prime, nums)
prime_count = sum(results)
end = time.time()
print(f"100000以内的素数个数为:{prime_count}")
print(f"耗时:{end - start:.2f}秒")
```
运行结果如下:
```
100000以内的素数个数为:9592
耗时:1.47秒
```
解释说明:
1. 首先,定义一个函数`is_prime`,用于判断一个正整数是否是素数。
2. 然后,使用`Pool`创建一个进程池,最大进程数为4。
3. 使用`map`方法将1到100000的正整数序列传递给`is_prime`函数,并使用进程池并行判断每个正整数是否是素数,得到一个包含每个正整数是否是素数的结果列表`results`。
4. 使用`sum`函数统计`results`列表中素数的个数,即为100000以内的素数个数。
5. 最后,计算程序运行时间,并输出素数个数和运行时间。
需要注意的是,在使用进程池并行计算时,要将需要并行计算的函数放在`if __name__ == '__main__':`语句块中,以避免Windows下的奇怪错误。同时,在判断素数时,只需要判断到该数的平方根即可,因为如果一个数n不是素数,那么它一定可以分解成两个数a和b的乘积,其中a和b中必有一个小于等于n的平方根。