题目1:计算50000~100000之间所有素数的个数; 要求如下: - 编写函数判断一个数字是否为素数,然后统计素数的个数; - 分别通过普通方式实现,和多任务方式实现; - 对比1: 对比使用多进程(多线程)和不使用多任务两种方法的统计速度(pytjon代码实现)
时间: 2024-02-27 08:54:33 浏览: 122
从键盘任意输入两个整数,输出两数之间的素数,素数判断用函数实现。 扩展要求:1)程序可以循环执行,判断完一组可以再进行下一组;可以设定一个特殊键退出
5星 · 资源好评率100%
好的,下面是Python代码实现:
普通方式实现:
```python
import math
# 判断数字是否为素数
def is_prime(num):
if num <= 1:
return False
for i in range(2, int(math.sqrt(num))+1):
if num % i == 0:
return False
return True
# 统计50000到100000之间的素数个数
count = 0
for i in range(50000, 100001):
if is_prime(i):
count += 1
print("普通方式实现:50000到100000之间的素数个数为:", count)
```
多线程方式实现:
```python
import math
import threading
# 判断数字是否为素数
def is_prime(num):
if num <= 1:
return False
for i in range(2, int(math.sqrt(num))+1):
if num % i == 0:
return False
return True
# 每个线程需要处理的子区间
def count_primes(start, end):
count = 0
for i in range(start, end):
if is_prime(i):
count += 1
return count
# 统计50000到100000之间的素数个数
count = 0
# 将区间分为4个子区间
ranges = [(50000, 62500), (62500, 75000), (75000, 87500), (87500, 100001)]
# 创建4个线程分别处理每个子区间
threads = []
for r in ranges:
t = threading.Thread(target=count_primes, args=(r[0], r[1]))
threads.append(t)
t.start()
# 等待所有线程结束并统计素数个数
for t in threads:
t.join()
count += t.result()
print("多线程方式实现:50000到100000之间的素数个数为:", count)
```
多进程方式实现:
```python
import math
import multiprocessing
# 判断数字是否为素数
def is_prime(num):
if num <= 1:
return False
for i in range(2, int(math.sqrt(num))+1):
if num % i == 0:
return False
return True
# 每个进程需要处理的子区间
def count_primes(start, end):
count = 0
for i in range(start, end):
if is_prime(i):
count += 1
return count
# 统计50000到100000之间的素数个数
count = 0
# 将区间分为4个子区间
ranges = [(50000, 62500), (62500, 75000), (75000, 87500), (87500, 100001)]
# 创建4个进程分别处理每个子区间
processes = []
for r in ranges:
p = multiprocessing.Process(target=count_primes, args=(r[0], r[1]))
processes.append(p)
p.start()
# 等待所有进程结束并统计素数个数
for p in processes:
p.join()
count += p.exitcode
print("多进程方式实现:50000到100000之间的素数个数为:", count)
```
以上是三种实现方式的Python代码。由于多线程和多进程方式涉及到并发和同步等问题,因此运行时间可能会受到CPU核心数、线程数或进程数等因素的影响,具体结果可能因机器不同而异。
阅读全文