#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 } } }