python素数生成器_用生成器实现素数序列

先说说思路:

素数是一个无限循环,这一点跟生成器的特性很像,所以我们用生成器所谓这个素数序列的主要部分。

第二步就是要筛选了,首先从自然数序列中,从2开始的自然数序列,用一个生成器表示比较合适。

从以第个元素开始2,肯定是素数,收入到素数集合里,取下一个元素,由于前一个元素的所有倍数都被筛选掉了,所以新序列的第一个元素一定是素数“除了自己之外,没有约数”

循环不止,筛选不止。得到是这个无限循环列表就是素数序列

筛选的过程我们想起来内建函数filter(),特性很像mapreduce,可以用来所列表筛选。

于是第一步,我们先用生成器组建从2开始的自然数序列,代码如下:

1 defOddList():2 n = 1

3 whileTrue:4 n += 1

5 yield

第二步:我们要设置筛选函数,对于一个新的序列,我们要拿到第一个元素,然后对整个序列做一次迭代,删掉第一个元素的倍数,该特性与filter()一样,

1 defMultiFilter(multipleNum):2 return lambda element: element % multipleNum > 0

说明:由于multifilter是被filter()包含的,所以multerfilter中有一个参数是序列的元素,一定会传进来的,但是由于无法表示2个参数,所以考虑用匿名

第三步:限迭代奇数生成器,在每一个迭代中,生成一个新的序列(生成器),生成新序列的过程又是一个迭代过程,在这个过程中把元素n的倍数过滤掉

1 defPrimeList(maxNum):2 mainList =OddList() #主要为了生成23 firstElement = next(OddList()) #curentElement 标签始终指向当前元素,作为倍数参与筛选

4 yieldfirstElement5 while firstElement

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值