埃氏筛法步骤:
1.把序列中的1删除,因为1既不是质数也不是合数
2.读取序列中的第一个数字2,并把序列中2的倍数删除
3.读取序列中的第一个数字3,并把3的倍数删除
4.读取第一个数字5,并把5的倍数删除
...
使用python 的高级函数filter()
实现⬇️
def _odd_iter():#从3开始的奇数序列
n = 1
while True:
n = n + 1
yield n
def _not_divisible(n):#筛选函数
return lambda x: x % n > 0
def primes():
yield 2
it = _odd_iter()#初始序列
while True:
n = next(it)#返回序列的第一个数
yield n
it = filter(_not_divisible(n),it)#构造新的序列
网友评论