python用遞迴篩選法求N以內的孿生質數(孿生素數)
阿新 • • 發佈:2019-09-09
本人最近讀完一本書《質數的孤獨》,裡面講到孿生質數,就想查一下孿生質數的分佈情況。其中主要用到了計算質數(素數)的方法,搜了一下,排名前幾的都是用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
技術類文章精選
- java一行程式碼列印心形
- Linux效能監控軟體netdata中文漢化版
- 介面測試程式碼覆蓋率(jacoco)方案分享
- 效能測試框架
- 如何在Linux命令列介面愉快進行效能測試
- 圖解HTTP腦圖
- 如何測試概率型業務介面
- httpclient處理多使用者同時線上
- 將swagger文件自動變成測試程式碼
- 五行程式碼構建靜態部落格
- httpclient如何處理302重定向
- 基於java的直線型介面測試框架初探