一、暴力筛法
bool prime(int n){
for(int i=2;i*i<=n;i++){
if(n%2==0){
return 0;
}
}
return 1;
}
二、埃氏筛法
const int N=;
bool isnp[N];
void prime(int n){
for(int i=2;i*i<=n;i++){
if(!isnp[i]){
for(int j=i*i;j<=n;j+=i){
isnp[j]=1;
}
}
}
}
三、欧拉筛法
const int N=;
bool isnp[N];
int num[N];
void prime(int n){
int cnt=0;
for(int i=2;i<=n;i++){
if(!isnp[i]){
num[++cnt]=i;
}
for(int j=1;j<=cnt&&i*num[j]<=n;j++){
isnp[i*num[j]]=1;
if(i%num[j]=0){
break;
}
}
}
}
四、欧拉筛法优化
bool prime(int n){
if(n==2||n==3){
return 1;
}
if(n%6!=1&&n%6!=5){
return 0;
}
for(int i=5;i*i<=n;i+=6){
if(n%i==0||n%(i+2)==0){
return 0;
}
}
return 1;
}