如何用python求100以內的素數?( 二 )


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, ...等數中的合數 。最后等待所有線程執行完畢,返回所有為素數的數 。

猜你喜歡