赞
踩
任务描述
本关任务:使用Python多进程求素数个数。
相关知识
为了完成本关任务,你需要掌握:1.多进程的使用。
编程要求
根据提示,在右侧编辑器补充代码,用多进程实现求区间[1,n]里素数的个数。 说明:求区间内素数个数是计算型密集任务,且可以将区间分成互不相关的子区间,分别使用进程对他们求解,正是多进程的用武之地!
测试说明
平台会对你编写的代码进行测试:
测试输入:5
; 预期输出: 3
测试输入:10; 预期输出:
4`
- import math
- from multiprocessing import cpu_count
- from multiprocessing import Pool
-
-
- def isPrime(n):
- # 判断数字是否为素数
- # 请在此处添加代码 #
- # *************begin************#
- if n<=1:
- return False
- for i in range(2,int(math.sqrt(n))+1):
- if n%i == 0:
- return False
- return True
- # **************end*************#
-
-
-
-
- def howMany(T):
- # 计算给定区间含有多少个素数
- # 请在此处添加代码 #
- # *************begin************#
- sum = 0
- for i in range(T[0],T[1]+1):
- if isPrime(i):
- sum+=1
- return sum
- # **************end*************#
-
-
-
-
- def separateNum(N, CPU_COUNT):
- # 对整个数字空间N进行分段CPU_COUNT
- # 请在此处添加代码 #
- # *************begin************#
- list=[[i*(N//CPU_COUNT)+1,(i+1)*(N//CPU_COUNT)] for i in range(0,CPU_COUNT)]
- list[0][0]=1
- if list[CPU_COUNT-1][1]<N:
- list[CPU_COUNT-1][1]=N
- return list
- # **************end*************#
-
- if __name__ == '__main__':
- N = int(input())
- # 多进程
- CPU_COUNT = cpu_count() ##CPU内核数 本机为8
- pool = Pool(CPU_COUNT)
- sepList = separateNum(N, CPU_COUNT)
- result = []
- for i in range(CPU_COUNT):
- result.append(pool.apply_async(howMany, (sepList[i], )))
- pool.close()
- pool.join()
- # ans = 0
- list = [res.get() for res in result]
- print(sum(list), end = '')
-
-
任务描述
本关任务:使用 Python 多线程,实现求合数的个数。
相关知识
为了完成本关任务,你需要掌握:1.python多线程。
编程要求
根据提示,在右侧编辑器补充代码,使用多线程计算给定区间合数的个数。 本关已给出素数判定方法,需要你补充主函数中相关内容,实现统计合数个数的相关内容。
测试说明
平台会对你编写的代码进行测试:
测试输入:5
; 预期输出: 1
测试输入:10
; 预期输出: 5
- import threading
- import math
- ans = 0
- lock = threading.Lock()
-
-
- import threading
- import math
- ans = 0
- lock = threading.Lock()
-
-
- def isPrime(n):
- # 判断数字是否为素数
-
- global ans
- if n <= 1:
- return False
- for i in range(2, int(math.sqrt(n)) + 1):
- if n % i == 0:
- return False
- return True
-
-
-
-
- def howMany(T):
- # 计算给定区间含有多少个素数
-
-
- sum = 0
- for i in range(T[0], T[1] + 1):
- if isPrime(i):
- sum += 1
- lock.acquire()
- try:
- global ans
- ans += sum
- finally:
- lock.release()
-
-
-
-
-
- def seprateNum(N, CPU_COUNT):
- # 对整个数字空间N进行分段CPU_COUNT
- list = [[i * (N // CPU_COUNT) + 1, (i + 1) * (N // CPU_COUNT)] for i in range(0, CPU_COUNT)]
- list[0][0] = 1
- if list[CPU_COUNT - 1][1] < N:
- list[CPU_COUNT - 1][1] = N
- return list
-
- if __name__ == '__main__':
- N = int(input())
- threadNum = 32
- # 请在此处添加代码 #
- # *************begin************#
- t=[]
- sepList=seprateNum(N,threadNum)
- for i in range(0,threadNum):
- t.append(threading.Thread(target=howMany,args=(sepList[i],)))
- t[i].start()
- for i in range(0,threadNum):
- t[i].join()
- print(N-1-ans,end='')
- # **************end*************#
任务描述
本关任务:输入一个数n,打印n个foobarpython。
相关知识
为了完成本关任务,你需要掌握:1.线程的使用,2.线程锁的使用。
编程要求
根据提示,在右侧编辑器补充代码,输出n个foobarpython。
测试说明
平台会对你编写的代码进行测试:
测试输入:1
; 预期输出: foobarpython
解释:“foobarpython”将输出1次
测试输入:5
; 预期输出: foobarpythonfoobarpythonfoobarpythonfoobarpythonfoobarpython
解释:“foobarpython”将输出5次
- import threading
- import sys
- import time
-
-
- def showfoo(n):
- '''
-
- :param n: 要输出foobarpython的次数
- :return: 无返回,可直接输出
- '''
- # 请在此处添加代码 #
- # *************begin************#
- for i in range(n):
- lockpython.acquire()
- print('foo',end='')
- sys.stdout.flush()
- lockfoo.release()
- time.sleep(0.2)
- # **************end*************#
-
-
- def showbar(n):
- '''
- :param n: 要输出foobarpython的次数
- :return: 无返回,可直接输出
- '''
- # 请在此处添加代码 #
- # *************begin************#
- for i in range(n):
- lockfoo.acquire()
- print('bar',end='')
- sys.stdout.flush()
- lockbar.release()
- time.sleep(0.2)
- # **************end*************#
-
- def showpython(n):
- '''
- :param n: 要输出foobarpython的次数
- :return: 无返回,可直接输出
- '''
- # 请在此处添加代码 #
- # *************begin************#
- for i in range(n):
- lockbar.acquire()
- print('python',end='')
- sys.stdout.flush()
- lockpython.release()
- time.sleep(0.2)
-
- # **************end*************#
-
-
- if __name__ == '__main__':
- lockfoo = threading.Lock() # 定义3个互斥锁
- lockbar = threading.Lock()
- lockpython =threading.Lock()
- n = int(input())
- t1 = threading.Thread(target=showfoo,args=[n]) # 定义3个线程
- t2 = threading.Thread(target=showbar,args=[n])
- t3 = threading.Thread(target=showpython,args=[n])
- lockfoo.acquire() # 先锁住foo,bar锁,保证先打印foo
- lockbar.acquire()
-
-
- t1.start()
- t2.start()
- t3.start()
-
-
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。