如何用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, ...等数中的合数 。最后等待所有线程执行完毕,返回所有为素数的数 。

猜你喜欢