python中使用filter生成全部素数算法及讲解

本文介绍了一个使用Python实现的高效素数生成器。通过定义奇数迭代器和筛选函数,利用生成器和filter函数实现了埃拉托斯特尼筛法,能够依次生成所有素数。文章详细解释了代码的运行流程,展示了如何通过惰性序列逐步排除非素数,最终得到素数序列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

def _odd_iter():
    n = 1
    while True:
        n = n + 2
        yield n

def zc(x):
     return  x%n > 0

def _not_divisible(n):
    return lambda x: x % n > 0

def primes():
    yield 2
    it = _odd_iter() # 将地址赋予it
    while True:
        n = next(it) # 返回序列的第一个数3
        yield n
        it = filter(_not_divisible(n), it) # 构造新序列
#对上面解释:
# 第一次返回2
#  第二次执行时,第一次执行到yield n 这时候n=3,返回3
#第三次执行时,执行到了it = filter(_not_divisible(n), it),
# 此时n=3,也就是it2 = filter(lambda x:x%3 > 0,it) lambda x:x%3>0是函数,括号中的it是惰性序列,(这里为了区分使用it2标记)
# 然后由函数与it构造一个filter返回一个新的惰性序列,赋值给it2
# 此时的it2=filter(lambda x:x%3 > 0,iterator(3,5,7,9....))即it2收集到的是一个不能被2,3整除的惰性序列即iterator(5,7,11...)
#然后继续执行,while True: n=next(it2) 然后将n的值返回,这里是将此时n的值为5,因为it2过滤掉了3,3%3=0,然后将5返回
#第四次执行,it3 = filter(lambda x:x%5 > 0,iterator(5,7,11...))此时it3收集到的是不能被2,3,5整除的惰性序列了
#以此类推,就收集到了全部的素数啦
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值