模板:篩素數法

來源:互聯網
上載者:User

標籤:style   blog   http   color   for   ar   art   div   log   

參考:http://blog.csdn.net/liukehua123/article/details/5482854

 

1.開一個大的bool型數組prime[],大小就是n+1就可以了.先把所有的下標為奇數的標為true,下標為偶數的標為false.

    2.然後:

      for( i=3; i<=sqrt(n); i+=2 )

      {   if(prime[i])

          for( j=i+i; j<=n; j+=i ) prime[j]=false;

      }

    3.最後輸出bool數組中的值為true的單元的下標,就是所求的n以內的素數了。

    原理很簡單,就是當i是質(素)數的時候,i的所有的倍數必然是合數。如果i已經被判斷不是質數了,那麼再找到i後面的質數來把這個質

數的倍數篩掉。

 

Code:

 

 1 #include <cmath> 2  3 #define MAX_NUM 10000 4  5  6 bool * arr_prime = new bool[MAX_NUM + 1]; 7      8 for(i = 3; i <= MAX_NUM; i += 2) arr_prime[i] = true; 9 for(i = 4; i <= MAX_NUM; i += 2) arr_prime[i] = false;10 arr_prime[2] = true;11 12 int sqrt_mn = sqrt(MAX_NUM);13 14 for(i = 3; i < sqrt_mn; i += 2)15 {16     if(arr_prime[i])17     {18         for(j = i + i; j <= MAX_NUM; j += i) arr_prime[j] = false;19     }20 }21     

 

模板:篩素數法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.