ACM 求素數 線性篩法 o[n]

線性篩法,終於搞明白了,附帶大神的講解,走你

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永遠成立,這樣就不會重複篩選
      }
   }
}
發佈了40 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章