zoukankan      html  css  js  c++  java
  • 素数筛

    1 O(n*logn) 同时生成素数表

    const int maxn=30000+5;
    const int maxm=1000000+5;
    int prime[maxn],ptot;
    bool isprime[maxn];
    void marktable(int n){
        memset(isprime,0,sizeof(isprime));
        ptot=0;isprime[1]=1;
        for(int i=2;i<=n;i++){
            if(!isprime[i]) {
                prime[ptot++]=i;
                for(int j=i*i;j<=n;j+=i)
                isprime[j]=true;
            }
        }
        //for(int i=0;i<ptot;i++) cout<<prime[i]<<endl;
    }

    2 O(n)同时生成素数表

    const int maxn=30000+5;
    const int maxm=1000000+5;
    int prime[maxn],ptot;
    bool isprime[maxn];
    void marktable(int n){
        memset(isprime,0,sizeof(isprime));
        ptot=0;isprime[1]=1;
        for(int i=2;i<=n;i++){
            if(!isprime[i]) prime[ptot++]=i;
            for(int j=0;j<ptot;j++){
                if(i*prime[j]>n) break;
                isprime[i*prime[j]]=true;
                if(i%prime[j]==0) break;
            }
        }
        //for(int i=0;i<ptot;i++) cout<<prime[i]<<endl;
    }

     3 只生成素数筛

    const int maxn=30000+5;
    
    int prime[maxn];
    void marktable(int n){
        memset(prime,0,sizeof(prime));
        for(int i=2;i<=n;i++){
            if(!prime[i]) prime[++prime[0]]=i;
            for(int j=1;j<=prime[0]&&prime[j]<=n/i;j++){
                prime[prime[j]*i]=1;
                if(i%prime[j]==0) break;
            }
        }
    }
  • 相关阅读:
    Layui_2.x_上传插件使用
    Layui_1.0.9_分页实例_Java
    Jquery_如何扩展方法
    Linux_Crontab命令
    Linux_Centos7_设置MySql定时备份
    Linux_MySql_tar_安装(转)
    MySql_创建用户并赋予权限
    滚动条定位
    MySQL 存储过程创建表
    取两个时间差
  • 原文地址:https://www.cnblogs.com/033000-/p/10088598.html
Copyright © 2011-2022 走看看