python100以内孪生素数_python用递归筛选法求N以内的孪生质数(孪生素数)
本人最近讀完一本書《質(zhì)數(shù)的孤獨》,里面講到孿生質(zhì)數(shù),就想查一下孿生質(zhì)數(shù)的分布情況。其中主要用到了計算質(zhì)數(shù)(素數(shù))的方法,搜了一下,排名前幾的都是用for循環(huán)來做的,感覺略微麻煩了一些,在比較一些還是覺得用遞歸篩選法來解決這個問題。
新建List,然后從第0位開始,如果后面的能被這個數(shù)整除,則從數(shù)組中移除改元素,以此類推,最后留下的就是質(zhì)數(shù)(素數(shù))。
python版本與java版本不同,java可以在遍歷list的時候刪除該元素,可以對循環(huán)變量i進行i--的操作,防止以后的get(i)方法報錯,python不支持這個操作只能是拿到被刪除的元素,然后在遍歷結(jié)束以后再去刪除
代碼如下:
#!/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 ("孿生質(zhì)數(shù):"+str(a)+"----"+str(b))
這里備注一下:python為了防止內(nèi)存溢出,限制了遞歸的深度,所以直接求10000以內(nèi)的還不行,會報錯:
RecursionError: maximum recursion depth exceeded in comparison
技術類文章精選
非技術文章精選
總結(jié)
以上是生活随笔為你收集整理的python100以内孪生素数_python用递归筛选法求N以内的孪生质数(孪生素数)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python的dll文件在哪_Pytho
- 下一篇: 无忧考吧python编译环境不存在_py