1. 程式人生 > >python用遞迴篩選法求N以內的孿生質數(孿生素數)

python用遞迴篩選法求N以內的孿生質數(孿生素數)

本人最近讀完一本書《質數的孤獨》,裡面講到孿生質數,就想查一下孿生質數的分佈情況。其中主要用到了計算質數(素數)的方法,搜了一下,排名前幾的都是用for迴圈來做的,感覺略微麻煩了一些,在比較一些還是覺得用遞迴篩選法來解決這個問題。

新建List,然後從第0位開始,如果後面的能被這個數整除,則從陣列中移除改元素,以此類推,最後留下的就是質數(素數)。

python版本與java版本不同,java可以在遍歷list的時候刪除該元素,可以對迴圈變數i進行i--的操作,防止以後的get(i)方法報錯,python不支援這個操作只能是拿到被刪除的元素,然後在遍歷結束以後再去刪除

程式碼如下:

#!/usr/bin/python3
 
class Test():
    def __init__(self):
        print ("fan")
    def get(self,list,st):
        n = list[st]
        a = []
        for i in range(st+1,len(list)):
            if list[i] % n == 0:
                a.append(list[i])
        for x in a:
            list.remove(x)
        if len(list) > st+1:
            self.get(list,st+1)
if __name__ == "__main__":
    test = Test()
    list = [i for i in range(2,5000)]
    test.get(list,0)
    for i in range(len(list)-1):
        a = list[i]
        b = list[i+1]
        if b-a==2:
            print ("孿生質數:"+str(a)+"----"+str(b))

這裡備註一下:python為了防止記憶體溢位,限制了遞迴的深度,所以直接求10000以內的還不行,會報錯:

RecursionError: maximum recursion depth exceeded in comparison

技術類文章精選

  1. java一行程式碼列印心形
  2. Linux效能監控軟體netdata中文漢化版
  3. 介面測試程式碼覆蓋率(jacoco)方案分享
  4. 效能測試框架
  5. 如何在Linux命令列介面愉快進行效能測試
  6. 圖解HTTP腦圖
  7. 如何測試概率型業務介面
  8. httpclient處理多使用者同時線上
  9. 將swagger文件自動變成測試程式碼
  10. 五行程式碼構建靜態部落格
  11. httpclient如何處理302重定向
  12. 基於java的直線型介面測試框架初探

非技術文章精選

  1. 為什麼選擇軟體測試作為職業道路?
  2. 成為傑出Java開發人員的10個步驟
  3. 寫給所有人的程式設計思維
  4. 自動化測試的障礙
  5. 自動化測試的問題所在
  6. 測試之《程式碼不朽》腦圖

點選檢