prime = [True] * (n + 1)
prime[0] = prime[1] = False
threads = []
for i in range(num_threads):
t = threading.Thread(target=eratosthenes_mt_worker, args=(i, num_threads, n, prime))
threads.append(t)
t.start()
for t in threads:
t.join()
return [i for i in range(n + 1) if prime[i]]
def eratosthenes_mt_worker(start, step, n, prime):
for i in range(start + 2, n + 1, step):
if prime[i]:
for j in range(i * i, n + 1, i):
prime[j] = False
```
这段代码首先生成一个长度为n+1的列表prime,其中prime[i]表示i是否为素数 。然后创建num_threads个线程,每个线程负责筛掉start+2, start+2+step, start+2+2*step, ...等数中的合数 。最后等待所有线程执行完毕,返回所有为素数的数 。
猜你喜欢
- 工资计算方法是如何计算
- 养生常识 饭后保健不如饭前养生有益健康
- Photoshop如何制作三角形?
- 如何关闭系统还原
- 如何使卵巢减缓衰老呢?
- 求各种动物叫声的拟声词如汪汪
- 女人怎样补钙呢
- 如何让来电只显示姓名
- 献血后如何保护针眼
- 冬季如何穿衣 抗寒保暖试试洋葱式穿衣法
