首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++经典算法题-筛选质数

15.Algorithm Gossip: Eratosthenes 筛选质数 说明 除了自身之外,无法被其它整数整除数称之为质数,要求质数很简单,但如何快速 求出质数则一直是程式设计人员与数学家努力课题...,在这边介绍一个着名 Eratosthenes质数方法。...解法 首先知道这个问题可以使用回圈来求解,将一个指定数除以所有小于它数,若可以 整除就不是质数,然而如何减少回圈检查次数?如何求出小于N所有质数?...15 17 19 21 N 再将3倍数筛去: 2 3 5 7 11 13 17 19 N 再来将5倍数筛去,再来将7质数筛去,再来将11倍数筛去 ,如此进行到最后留下 数就都是质数,这就是...检查次数还可以再减少,事实上,只要检查6n+1与6n+5就可以了,也就是直接跳过2与3倍数,使得程式中if检查动作可以减少。

41420
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Python|欧拉筛法质数

    问题描述 我们知道第一个质数是 2、第二个质数是 3、第三个质数是 5……请你计算第 2020 个质数是多少?...解决方案 当看到这种寻找质数问题,很多人第一时间想到便是二重循环暴力查找,如果只找前几个质数,可以使用这种暴力查找方法。但如果要找第2020个质数,第9999个质数,这种暴力方法就不适用了。...这个时候就可以使用筛法来质数,本文介绍是欧拉筛法。其运用原理是质数倍数一定不是质数。因此将质数倍数直接标记成合数,以达到筛选质数目的。...而到后面的某个质数prime2去筛i * prime2时候,就有i * prime2 == x * prime * prime2,因而prime和prime2都是i * prime2质因子。...例如:i=2筛选4,i=3筛选6和9,但到i=4时候,prime先为2,筛掉8,但运行到I % prime == 0这一步时候就直接break了,也就避免了再遍历prime = 3时候筛掉12,而

    1.6K20

    面试真题:100万内质数

    一个头发稀少、穿着格子衬衣中年男子走了进来,把手里拿MAC放在桌子上,对我说:“我会用电脑记录面试过程,你不要介意啊”。 我回答到:“没关系。”...面试官:“先来一点基础算法题吧,用Java写一个方法,100万内质数。”...我心中暗想确实很基础,质数不就是除了1和自身外无法被其他数整除数嘛,于是便写下: public static List findPrime(){ List...不过再想想,有什么可以优化地方?” 我想了想,说:“好像没有什么可以优化?” 我左思右想一番,说:“应该没有吧。” 面试官说:“确定没有了嘛?” 我肯定地回答:“确定没有了。”...我有点不服气,抢着问到:“您说说,还有什么可以优化地方?” 面试官微笑了一下,说:“还可以利用之前计算出质数做整除就可以了,性能至少可以提升一倍。”

    42440

    【模板小程序】小于等于N范围内质数

    1 //筛法N以内素数(普通法+优化),N>=2 2 #include 3 #include 4 #include 5 using...;//这里保存了小于等于N素数 26 } 附:素数筛法原理(具体出处记不得了,可以留言我补上) 【算法-ACM-素数】素数算法及其复杂度分析 关于搜寻一定范围内素数算法及其复杂度分析...当然没 接触过程序竞赛之前我也只会这一种n以内素数方法。-_-~)不会耗时很多.     但是当n很大时候,比如n=10000000时,n*sqrt(n)>30000000000,数量级相当大。...原理很简单,就是当i是质(素)数时候,i所有的倍数必然是合数。如果i已经被判断不是质数了,那么再找到i后面的质数来把这个质 数倍数筛掉。      一个简单筛素数过程:n=30。    ...这上面的所有的素数筛选算法都可以再进一步化为二次筛选法,就是欲求n以内素数,就先把sqrt(n)内素数 出来,用已经求得素数来筛出后面的合数。

    1.3K10

    groovy使用stream语法递归筛选法N以内质数

    本人最近读完一本书《质数孤独》,里面讲到孪生质数,就想查一下孪生质数分布情况。...其中主要用到了计算质数(素数)方法,搜了一下,排名前几都是用for循环来做,感觉略微麻烦了一些,在比较一些还是觉得用递归筛选法来解决这个问题。...新建List,然后从第0位开始,如果后面的能被这个数整除,则从数组中移除改元素,以此类推,最后留下就是质数(素数)。...0) list.remove(i--); } if (list.size() > ++tt) get(list, tt); } 然后再去做相邻元素差求得孪生质数...(孪生素数),贴一下10000以内孪生质数(孪生素数)全部代码: List list = new ArrayList(); for (int i = 2; i

    1.7K30

    python用递归筛选法N以内孪生质数(孪生素数)

    本人最近读完一本书《质数孤独》,里面讲到孪生质数,就想查一下孪生质数分布情况。...其中主要用到了计算质数(素数)方法,搜了一下,排名前几都是用for循环来做,感觉略微麻烦了一些,在比较一些还是觉得用递归筛选法来解决这个问题。...新建List,然后从第0位开始,如果后面的能被这个数整除,则从数组中移除改元素,以此类推,最后留下就是质数(素数)。...python版本与java版本不同,java可以在遍历list时候删除该元素,可以对循环变量i进行i--操作,防止以后get(i)方法报错,python不支持这个操作只能是拿到被删除元素,然后在遍历结束以后再去删除...:"+str(a)+"----"+str(b)) 这里备注一下:python为了防止内存溢出,限制了递归深度,所以直接10000以内还不行,会报错: RecursionError: maximum

    2.6K20

    ☆打卡算法☆LeetCode 204. 计数质数 算法解析

    一、题目 1、算法题目 “给定整数n,返回所有小于整数n质数数量。” 题目链接: 来源:力扣(LeetCode) 链接: 204....计数质数 - 力扣(LeetCode) 2、题目描述 给定整数 n ,返回 所有小于非负整数 n 质数数量 。...示例 2: 输入: n = 0 输出: 0 二、解题 1、思路分析 题意要求出所有小于整数n质数数量。 统计质数数量有很多方法,直观思路是枚举每个数判断是不是质数。...首先来看一下质数性质: 在大于1自然数中,除了1和它本身以外不再有其他因数自然数。...根据质数性质,对于每个数x,可以枚举[2,x-1]中每个数y,判断y是否为x因数,但是这样时间复杂度过高,需要考虑其他方法。

    59520

    java用递归筛选法N以内孪生质数(孪生素数)

    本人最近读完一本书《质数孤独》,里面讲到孪生质数,就想查一下孪生质数分布情况。...其中主要用到了计算质数(素数)方法,搜了一下,排名前几都是用for循环来做,感觉略微麻烦了一些,在比较一些还是觉得用递归筛选法来解决这个问题。...新建List,然后从第0位开始,如果后面的能被这个数整除,则从数组中移除改元素,以此类推,最后留下就是质数(素数)。...0) list.remove(i--); } if (list.size() > ++tt) get(list, tt); } 然后再去做相邻元素差求得孪生质数...(孪生素数),贴一下10000以内孪生质数(孪生素数)全部代码: List list = new ArrayList(); for (int i = 2; i

    1.8K10
    领券