专栏首页FunTesterpython用递归筛选法求N以内的孪生质数(孪生素数)

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

本文分享自微信公众号 - FunTester(NuclearTester),作者:八音弦

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ArrayList浅、深拷贝

    ArrayList深拷贝和浅拷贝。ArrayList的clone()方法用于创建list的浅表副本。在新列表中,仅复制对象引用。如果我们在第一个ArrayLis...

    FunTester
  • 解决统计出现次数问题的方法类

    本人在测试抽奖活动的过程中,遇到一个需求,需要统计每一次抽奖结果,然后跟预期值比较。一开始的思路是没遇到一次然后设立一个int 类型的参数,然后遇到了就++一次...

    FunTester
  • 删除List中null的N种方法--最后放大招

    Apache Commons CollectionUtils类提供了一个filter方法,该方法也可以解决我们的目的。传入的谓词将应用于列表中的所有元素:

    FunTester
  • python学习笔记(4)——groupby

    自学《python编程从入门到实践》的第16章的16.2.6 收盘价均值,讲解得不够详细,幸而在论坛看到了相关文章 ”Python编程:从入门到实践 json练...

    my_sunshine
  • python---爬取拉勾网

    在过几个月又是一年一度的毕业生求职时间了,这时候都需要往各个网站各个平台投递简历,这时候一份好的简历很重要,找对方向也很重要。这里我爬取了拉勾网30页关键字为...

    sjw1998
  • Python 数据类型

    Python主要数据类型包括list(列表)、tuple(元组)、dict(字典)和set(集合)等对象,下面逐一介绍这些Python数据类型。

    用户2793313
  • python 嵌套list的一些小结

    nested_list方法采用递归的方式,如果item是list类型,继续递归调用自身。如果不是,将item加入结果列表中即可。 flatten_list方...

    py3study
  • 【LeetCode】225. 用队列实现栈

    push(x) -- 元素 x 入栈 pop() -- 移除栈顶元素 top() -- 获取栈顶元素 empty() -- 返回栈是否为空 注意:

    韩旭051
  • 关于Iterator和Iterable

    shengjk1
  • C++ for循环的几种用法

    Qt君

扫码关注云+社区

领取腾讯云代金券