python用filter求素数不懂

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

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


回答:

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

it = filter(_not_divisible(n), it)

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

以上是 python用filter求素数不懂 的全部内容, 来源链接: utcz.com/p/937815.html

回到顶部