首页 > 代码库 > python埃式筛法求素数

python埃式筛法求素数

def _odd_iter():    n = 1    while(True):        n = n + 2        yield ndef _not_divisable(n):    return lambda x : x % n > 0def primes():    yield 2    it = _odd_iter()    while(True):        n = next(it)        yield n        it = filter(_not_divisable(n), it)for n in primes():    if n < 1000:        print(n)    else:        break

 

首先,列出从2开始的所有自然数,构造一个序列:

2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...

取序列的第一个数2,它一定是素数,然后用2把序列的2的倍数筛掉:

3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...

取新序列的第一个数3,它一定是素数,然后用3把序列的3的倍数筛掉:

5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...

取新序列的第一个数5,然后用5把序列的5的倍数筛掉:

7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...

不断筛下去,就可以得到所有的素数。

python埃式筛法求素数