本人最近讀完一本書《質數的孤獨》,裏面講到孿生質數,就想查一下孿生質數的分佈狀況。其中主要用到了計算質數(素數)的方法,搜了一下,排名前幾的都是用for循環來作的,感受略微麻煩了一些,在比較一些仍是以爲用遞歸篩選法來解決這個問題。java
新建List,而後從第0位開始,若是後面的能被這個數整除,則從數組中移除改元素,以此類推,最後留下的就是質數(素數)。python
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之內的還不行,會報錯:app
RecursionError: maximum recursion depth exceeded in comparison
框架