引子:Question:
给定两个数min,max,求出[min,max]区间的所有素数
C++的区间质数筛选,有两种方法。
Eratosthenes Algorithm
第一种就是Eratosthenes算法,该算法基于一个思想:对于任意的整数x,2x,3x,4x....一定不是质数。那好以二为起始点,很容易写出一下代码:
Code(Eratosthenes-1)
#include<cstdio>
#include<cstring>
bool vis[32768];
int main(){
int min,max;
scanf("%d %d",&min,&max);
memset(vis,1,sizeof(vis));
vis[1]=0,vis[0]=0;
for(int i=2;i<=max;i++){
if(vis[i]){
if(i>=min){
printf("%d ",i);
}
}
for(int j=i;j<=max;j+=i){
vis[j]=0;
}
}
return 0;
}