1.【埃氏筛】
标准:
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int v[110000],n;
cin>>n;
for(int i=2;i<=n;i++){
for(int j=i*2;j<=n;j++){
v[j]=1;
}
}
for(int i=2;i<=n;i++){
if(v[i]==0){
cout<<i<<" ";
}
}
return 0;
}
优化:
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int v[110000],n;
cin>>n;
for(int i=2;i<=n;i++){
if(v[i]==0){
for(int j=i*i;j<=n;j++){
v[j]=1;
}
}
}
for(int i=2;i<=n;i++){
if(v[i]==0){
cout<<i<<" ";
}
}
return 0;
}
2.【欧拉筛】
//欧拉筛 时间复杂度 O(n)
#include<iostream>
#include<cstdio>
using namespace std;
const int N=1e7+5;
int s[N],p[N],cnt,n;
int main(){
cin>>n;
for(int i=2;i<=n;i++){
if(s[i]==0){//是素数,存进去
p[cnt++]=i;
}
//遍历素数表
for(int j=0;p[j]<=n/i;j++){
s[p[j]*i]=1;
if(i%p[j]==0){
break;
}
}
}
for(int i=0;i<cnt;i++){
cout<<p[i]<<" ";
}
return 0;
}