線性篩法,終於搞明白了,附帶大神的講解,走你
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永遠成立,這樣就不會重複篩選
}
}
}