埃氏筛

作者: ProjectDaedalus | 来源:发表于2020-03-09 11:21 被阅读0次

埃拉托斯特尼筛法,简称埃氏筛,一种古老且简单的用来找出一定范围内所有的质数的算法。公元前250年由希腊数学家埃拉托斯特尼提出

abstract.png

算法原理

判断自然数n以内的全部质数,将不大于\sqrt{n} 的所有质数的倍数剔除,剩下的即为该自然数n以内的所有质数

Step 1. 先设定整个序列2,3,4,5, … , n-1,均标记为质数

Step 2. 取出整个序列的第一个质数 P,此时为 2

Step 3. 将该质数在n以内的倍数全部标记为非质数

Step 4. 根据标记信息按序取该序列中下一个质数Q(此时为3),先判断其平方值是否超过n,如果是,则该算法结束,质数与否标记完成;否则,返回Step 3

Java实现

public int countPrimes(int n) {
    boolean[] notPrime = new boolean[n];
    int num = 0;
    for(int i=2; i<n; i++)
    {
        if(!notPrime[i])
        {       
            num++;
            for(int j = 2; i*j < n; j++)    // 将该质数的倍数标记为非质数
            {
                notPrime[i*j] = true;
            }
        }
    }
    return num;
}

Note

之前笔者在解决该问题是对n以内所有数依次进行质数判断,结果发现费时费力…………

不得不感叹,古人的智慧是无穷的鸭…………

相关文章

  • 埃氏筛

    埃拉托斯特尼筛法,简称埃氏筛,一种古老且简单的用来找出一定范围内所有的质数的算法。公元前250年由希腊数学家埃拉托...

  • 素数相关问题练习 C++

    辗转相除 素数判定 埃氏筛法

  • 质因子分解(素数埃氏筛法)[PAT A1059]

    埃氏筛法原理质因子分解结论

  • 埃氏筛法

    计算素数的一个方法:埃氏筛法 1.构造一个从3开始的奇数列 def _odd_iter(): n=1 whil...

  • 埃氏筛法

    首先,列出从2开始的所有自然数,构造一个序列: 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 1...

  • 判断素数-埃氏筛法的详解

    埃氏筛法 一个判断素数的高效算法 关于埃氏筛法的百度百科解释在这里埃拉托斯特尼筛法,当然我不可能给个百度百科的解释...

  • 埃氏筛(求素数)

    众多筛法中最简单且容易理解的一种,时间复杂度为O(nloglogn),在找到一个素数后,马上将所求范围内该素数的倍...

  • 质数判断与埃氏筛

    质数判断 我们来看这么一道问题: 给定一个范围N,你需要处理M个某数字是否为质数的询问(每个数字均在范围1-N内)...

  • 机试常用算法和题型-数学专题

    数学专题,模拟 素数问题,普通筛和埃氏筛 另一种筛法,连续素数求和得超级素数 质因数 奇数魔方图 求小数的循环部分...

  • 数论

    数学问题 1. 质数筛 埃氏筛 利用当前已经找到的素数,从后面的数中筛去当前素数的倍数,由预备知识一可知,当前素数...

网友评论

    本文标题:埃氏筛

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