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如何制作三角形?
- 如何關閉系統還原
- 如何使卵巢減緩衰老呢?
- 求各種動物叫聲的擬聲詞如汪汪
- 女人怎樣補鈣呢
- 如何讓來電只顯示姓名
- 獻血后如何保護針眼
- 冬季如何穿衣 抗寒保暖試試洋蔥式穿衣法
