欧拉线性筛

纯模板,纯手写,不解释,看注释就好了

#include<iostream>
#include<cstring>
using namespace std;
//欧拉现行筛
int main(){
    int maxn=10001; //筛到maxn -1
    int pre[maxn],prime[maxn],t=0;  //pre数组存放每个数的最小质因子,prime存放筛出的素数
    memset(pre,0,sizeof(pre));
    memset(prime,0,sizeof(prime));
    for(int i=2;i<maxn;i++){
        if(!pre[i]){    //i是素数 
            prime[t++]=i;   //将i插入素数数组
        }
        for(int j=0;j<t&&i*prime[j]<maxn;j++){  //更改pre数组(注意下表不要越界) 
            pre[prime[j]*i]=prime[j];
            if(i%prime[j]==0)   //注意弹出(break)条件 
                break;
        }
    }
    //将prime数组输出 
    for(int i=0;i<t;i++)
        cout<<prime[i]<<" ";
    return 0;
} 

By YOUSIKI

你可能感兴趣的:(欧拉线性筛)