按要求编写程序,实现如下功能: 从标准输入stdin中读取两个正整数m和n, 然后开启n个线程,每个线程【依次轮流】输出【一个数字】和【自己的线程编号】到标准输出stdout, 所有线程输出的结果数列a的前m项。 数列a的定义为:a(1)=2347,a(2)=3917,a(k)=[a(k-1)^2 + 9337*a(k-2) + 6047] mod 10000 例如,m=100,n=2的情况,就是两个线程x和y交替输出。线程x输出2347,然后线程y输出3917,然后线程x输出a(3)即9673,然后线程y输出a(4)即9807……直到线程x输出a(99)的值、线程y输出a(100)的值后程序结束。
时间: 2023-03-22 19:01:17 浏览: 61
以下是按照要求编写的程序,实现从标准输入读取两个正整数m和n,然后开启n个线程,每个线程依次轮流输出一个数字和自己的线程编号到标准输出stdout,所有线程输出的结果数列a的前m项。数列a的定义为:a(1)=2347,a(2)=3917,a(k)=[a(k-1)^29337*a(k-2)6047]mod10000。
```python
import threading
m, n = map(int, input().split())
a = [0] * m
a[0], a[1] = 2347, 3917
lock = threading.Lock()
condition = threading.Condition()
def calculate(idx):
global a
for i in range(idx, m, n):
lock.acquire()
if i == 0:
print(a[i], idx)
else:
a[i] = (a[i-1] ** 29337 * a[i-2] + 6047) % 10000
print(a[i], idx)
lock.release()
with condition:
condition.notify_all()
condition.wait()
threads = []
for i in range(n):
t = threading.Thread(target=calculate, args=(i,))
threads.append(t)
t.start()
for t in threads:
t.join()
```
注意:以上程序仅用于本题目的要求,可能并不是最优解。