python用filter求素数不懂
题目描
用filter求素数
题目来源及自己的思路
廖雪峰网站的一个例子,小白问下 n = next(it) 这行,it的初始值应该是3,赋值给n也是3,在下面的过滤器不把it里面的3过滤掉了吗?
还有 n = next(it) 这行怎么返回第一个数的。
相关代码
def _odd_iter():
n = 1while True:
n = n + 2
yield n
def _not_divisible(n):
return lambda x: x % n > 0
def primes():
yield 2it = _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