美文网首页
厄拉多塞筛法

厄拉多塞筛法

作者: sAcc | 来源:发表于2020-12-04 10:20 被阅读0次

西元前250年,希腊数学家厄拉多塞(Eeatosthese)想到了一个非常美妙的质数筛法,减少了逐一检查每个数的的步骤,可以比较简单的从一大堆数字之中,筛选出质数来,这方法被称作厄拉多塞筛法(Sieve of Eeatosthese)。

具体操作:先将 2~n 的各个数放入表中,然后在2的上面画一个圆圈,然后划去2的其他倍数;第一个既未画圈又没有被划去的数是3,将它画圈,再划去3的其他倍数;现在既未画圈又没有被划去的第一个数 是5,将它画圈,并划去5的其他倍数……依次类推,一直到所有小于或等于 n 的各数都画了圈或划去为止。这时,表中画了圈的以及未划去的那些数正好就是小于 n 的素数。

其实,当你要画圈的素数的平方大于 n 时,那么后面没有划去的数都是素数,就不用继续判了。如下图:

Sieve_of_Eratosthenes_animation.gif
class Solution {
public:
    int countPrimes(int n) {
        bool *sign=new bool[n];
        int count=0;
        memset(sign,1,n);
        
        for(int i = 2 ; i < n ; i++)
        {
            if(sign[i])
            {
                count++;
                for(int j = i + i ; j < n ; j += i)
                {
                    sign[j]=false;
                }
            }
        }
        return count;
    }
};

相关文章

  • 力扣(LeetCode) - 204 计算质数

    本题可以用厄拉多塞筛法(厄拉多塞是一个数学家,他发名了一种质数筛选法叫做厄拉多塞筛法) 题目:统计所有小于非负整数...

  • 厄拉多塞筛法

    西元前250年,希腊数学家厄拉多塞(Eeatosthese)想到了一个非常美妙的质数筛法,减少了逐一检查每个数的的...

  • 204. Count Primes

    我的方法超时了,代码如下: 依然超时的办法,代码如下: 传说的## 厄拉多塞筛法

  • 204. 计数质数

    [toc] leetcode 难度:easy 题目 统计所有小于非负整数 n 的质数的数量。 思路 ==厄拉多塞筛...

  • 素数的个数

    求小于 n 的素数的个数厄拉多塞筛法,这种算法好像在信息安全数学基础中讲到过,果然学过的知识还是有用啊。思路:标记...

  • 算法:数学问题

    204 计数质数快速计算小于n的质数个数的厄拉多塞筛法:先将 2-N 的各数放入表中,然后在 2 的上面画一个圆圈...

  • LeetCode204-Count Primes

    分析 这个题相当于求小于n的所有质数,曾在编程之美中看到过一个求一组质数的算法,叫厄拉多塞筛法,时间复杂度仅有O(...

  • 谈谈厄拉多塞素数筛选法

    素数,就是只能被自己和一整除的数。在程序设计时很多时候都会涉及到素数的求法,而我也恰好也又一次遇到这个问题。所以在...

  • 谁有测量地球周长的尺子?

    厄拉多塞 276 B.C. —— 194 B.C. 关于我们生活的地球有很多的传说,直到古希腊数学家毕达...

  • 筛法

    素数表的获取 从1~n进行枚举,判断每个数是否是素数,如果是素数则加入素数表,这种方法的枚举部分的复杂度是O(n)...

网友评论

      本文标题:厄拉多塞筛法

      本文链接:https://www.haomeiwen.com/subject/psmbwktx.html