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

    #include<bits/stdc++.h>
    #define maxn 1000010
    using namespace std;
    
    int x;
    int cnt,isprime[maxn];
    bool notprime[maxn];
    
    void shai(int n){
        for(int i=2;i<=n;i++){
            if(notprime[i]==false){
                isprime[++cnt]=i;//把i加到质数表中,cnt计数1 
                for(int j=2;j<=n/i;j++)
                    notprime[j*i]=true;//把所有i的倍数标记为notprime 
            }
        }
    }
    
    int main(){
        cin>>x;
        shai2(x);
        for(int i=1;i<=cnt;i++)
            cout<<isprime[i]<<" ";
        cout<<endl;
        return 0;
    } 

    还可以优化常数:

    void shai2(int n){//优化 
        for(int i=2;i<=n;i++){
            if(notprime[i]==false){
                isprime[++cnt]=i; 
                for(int j=i*i;j<=n;j+=i)//前面的已经筛过了,从i*i开始可加速,注意不影响复杂度 
                    notprime[j]=true;//把所有i的倍数标记为notprime 
            }
        }
    }
  • 相关阅读:
    Java_多线程入门
    JAVA多线程基础(一)
    多线程1
    1.优化MySQL数据库
    廖胤松
    Mybatais
    Spring Boot入门
    MySQL的安装步骤详解
    MySQL入门
    WEB测试方法
  • 原文地址:https://www.cnblogs.com/DReamLion/p/14365121.html
Copyright © 2011-2022 走看看