zoukankan      html  css  js  c++  java
  • 3.1 筛法

    埃氏筛法

    • 先将2到n范围内的整数列出来,其中2是最小的素数。
    • 将表中所有的2的倍数划去,表中剩下的最小的数字就是3,他不能被更小的数整除,所以3是素数。
    • 再将表中所有的3的倍数划去……以此类推;
    • 如果表中剩余的最小的数是m,那么m就是素数。
    • 然后将表中所有m的倍数划去,像这样反复操作,就能依次枚举n以内的素数。
    2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
    2 3 - 5 - 7 - 9 - 11 - 13 - 15 - 17 - 19 -
    2 3 - 5 - 7 - 9 - 11 - 13 - - - 17 - 19 -
    • 时间复杂度为(O(nlog(logn)))
    • 样例代码如下
    bool h[10000005]={0}
    void E(int n)
    {
        for(int i=2; i<=n; i++)
        {
            if(h[i]) continue;
            for(int j=2; j*i<=n; j++) h[j*i]=1;
        }
    }
    

    例:给定一个正整数n(n<=10^6),问n以内有多少个素数?

    int prime[MAXN];//第i个素数
    bool is_pri[MAXN+10];//is_pri[i]表示i是素数
    //返回n以内素数的个数
    int sieve(int n)
    {
        int p=0;
        for(int i=0;i<=n;i++) is_pri[i]=true;
        is_pri[0]=is_pri[1]=false;
        for(int i=2; i<=n; i++)
        {
            if(is_pri[i])
            {
                prime[++p]=i;
                for(int j=2*i; j<=n; j+=i) is_pri[j]=false;
            }
        }
        return p;
    }
    
  • 相关阅读:
    LinkedList -链表集合
    java包装类,自动装箱,拆箱,以及基本数据类型与字符串的转换
    StringBuilder -字符串缓冲区,节约内层空间变长数组
    System的两常用个静态方法
    StringBuilder
    mysql
    空房间
    数据结构占坑
    sql语句优化
    editPlus快捷键
  • 原文地址:https://www.cnblogs.com/orange-233/p/12397284.html
Copyright © 2011-2022 走看看