线性筛法,终于搞明白了,附带大神的讲解,走你
const int N = 5000;
int isNotPrime[N]={1,1};//0和1都不是素数,其他的取默认值0代表是素数
int prime[N];//保存素数的数组
int num_prime;//prime[]数组里面素数的个数,取默认值为0
void init_prime(){
for(int i=2; i<N; i++){
if(!isNotPrime[i]){//如果i是素数
prime[num_prime++]=i;
}
for(int j=0; j<num_prime&&i*prime[j]<N; j++){
isNotPrime[i*prime[j]]=1;//i*prime[j]置位1,代表是合数
if(i%prime[j]==0)break;//保证当i=p1*p2*p3.....(p1<=p2<=p3...)时,prime[j]<=p1永远成立,这样就不会重复筛选
}
}
}