黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

python埃氏篩法filter()方法python2運(yùn)行卡死

系統(tǒng) 2027 0

目的:使用埃氏篩法構(gòu)造素?cái)?shù)

計(jì)算素?cái)?shù)的一個(gè)方法是埃氏篩法,它的算法理解起來(lái)非常簡(jiǎn)單:
首先,列出從2開(kāi)始的所有自然數(shù),構(gòu)造一個(gè)序列:
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, …
取序列的第一個(gè)數(shù)2,它一定是素?cái)?shù),然后用2把序列的2的倍數(shù)篩掉:
3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, …
取新序列的第一個(gè)數(shù)3,它一定是素?cái)?shù),然后用3把序列的3的倍數(shù)篩掉:
5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, …
取新序列的第一個(gè)數(shù)5,然后用5把序列的5的倍數(shù)篩掉:
7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, …
不斷篩下去,就可以得到所有的素?cái)?shù)。

代碼實(shí)現(xiàn)

            
              #_*_coding:utf_8_*_
def iters():#先構(gòu)造一個(gè)從3開(kāi)始的奇數(shù)序列。這是一個(gè)生成器,并且是一個(gè)無(wú)限序列
    n=1
    while 1:
        n=n+2
        yield n
def isinit(n):#篩選函數(shù)
    return lambda x:x%n>0
def prime():
    yield 2
    it=iters()# 初始序列
    while 1:
        n=next(it)# 返回序列的第一個(gè)數(shù)
        yield n
        it=filter(isinit(n),it)# 構(gòu)造新序列
for n in prime():
    if(n<10):
        print(n)
    else:
        break

            
          

問(wèn)題

在python3中能夠直接運(yùn)行,完美出結(jié)果,但是在python2中只出現(xiàn)第一個(gè)結(jié)果,后面就卡死了。原因是什么呢?搜了好多資料沒(méi)有這個(gè)的說(shuō)明,在大神那里得到了答案。

filter() 函數(shù):python2 會(huì)把你的 it 遍歷完再直接返回一個(gè) list。python3 不需要遍歷完,它返回一個(gè)iterable

解決方法:

自己實(shí)現(xiàn)filter方法,重寫(xiě)里面的邏輯,如下:

            
              def filter(func, it):
    while 1:
        v = next(it)
        if func(v):
            yield v

            
          

至此,上面代碼在python2中也可以完美運(yùn)行了。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論