本人最近读完一本书《质数的孤独》,里面讲到孪生质数,就想查一下孪生质数的分布情况。其中主要用到了计算质数(素数)的方法,搜了一下,排名前几的都是用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