参考
埃氏筛法时间复杂度:
const int maxn=1e6+6;
bool isprime[maxn];
void sieve(){
for(int i=0;i<=maxn;i++) isprime[i]=true;
isprime[0]=isprime[1]=false;
for(int i=2;i<=maxn;i++){//从2开始往后筛
if(isprime[i]){
for(int j=2*i;j<=maxn;j+=i){
isprime[j]=false;
}
}
}
}
问题
1 素数个数问题
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+6;
bool isprime[maxn];
void sieve(){
for(int i=0;i<=maxn;i++) isprime[i]=true;
isprime[0]=isprime[1]=false;
for(int i=2;i<=maxn;i++){//从2开始往后筛
if(isprime[i]){
for(int j=2*i;j<=maxn;j+=i){
isprime[j]=false;
}
}
}
}
int l,r;
int main(){
sieve();//预处理
int cnt=0;//计数
cin>>l>>r;
for(int i=l;i<=r;i++){
if(isprime[i]){
cnt++;
}
}
cout<<cnt<<endl;
return 0;
}
2 输入一个数n 判断他是不是素数(多组测试数据)
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+6;
bool isprime[maxn];
void sieve(){
for(int i=0;i<=maxn;i++) isprime[i]=true;
isprime[0]=isprime[1]=false;
for(int i=2;i<=maxn;i++){//从2开始往后筛
if(isprime[i]){
for(int j=2*i;j<=maxn;j+=i){
isprime[j]=false;
}
}
}
}
int n;
int main(){
sieve();//预处理
while(scanf("%d",&n)!=EOF){
if(isprime[n]){
cout<<"YES\n";
}else{
cout<<"NO\n";
}
}
return 0;
}