python用filter求素数不懂

新手上路,请多包涵

题目描

用filter求素数

题目来源及自己的思路

廖雪峰网站的一个例子,小白问下 n = next(it) 这行,it的初始值应该是3,赋值给n也是3,在下面的过滤器不把it里面的3过滤掉了吗?
还有 n = next(it) 这行怎么返回第一个数的。

相关代码

def _odd_iter():

n = 1
while True:
    n = n + 2
    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) # 构造新序列

打印1000以内的素数:

for n in primes():

if n < 1000:
    print(n)
else:
    break

麻烦大家解答清楚点,小白填坑中

阅读 1.6k
1 个回答

_odd_iter()返回一个奇数生成器(generator)这个应该没啥问题,因为非2的偶数不可能为素数。核心代码primes()实际上用的是埃拉托斯特尼筛法filter就是排除能被前面的素数整除的数,剩下的就是素数了。

it = filter(_not_divisible(n), it)

这个实际上会嵌套很多层,初始it中只返回奇数,第二层it将在奇数外面再加了一层过滤,即不能被 3 整除,第三层在第二层基础上又加了一层过滤,不能被 5 整除。。。。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题