600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > python100以内孪生素数_python用递归筛选法求N以内的孪生质数(孪生素数)

python100以内孪生素数_python用递归筛选法求N以内的孪生质数(孪生素数)

时间:2019-06-10 03:40:37

相关推荐

python100以内孪生素数_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

技术类文章精选

非技术文章精选

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。