对廖雪峰网站python教程中求素数的理解

对廖雪峰网站python教程中求素数的理解

原代码如下:

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) # 构造新序列
for n in primes():
    if n < 1000:
        print(n)
    else:
        break

廖雪峰python教程的网站链接
小于1000的素数
该代码是取3到1000的奇数,并用前面的数消去后面成倍数的数。从for循环开始,primes()里的第一个数为2,即第一个数print为2。接着继续循环,从yield 2下句开始,it= _odd_iter(),即it为【3,5,7,9…】的奇数序列,n是对序列it内部的一个接一个的取值,从第一个数3开始取,此时yield n (n=3),print 3。继续for循环到yield n下一句:it = filter(_not_divisible(n), it),此时n为3,用_not_divisible(n)函数将it中3的倍数进行筛选,留下不是3的倍数的数,接着n=5,yield 5。再利用n=5将it中5的倍数的数筛选,就这样不断循环,不断筛选,最终得到小于1000的素数。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值