素数筛选法

  1. #include <stdio.h> 
  2.  
  3. #define MAX_NUM 100000 
  4. int main(int argc, char *argv[]) 
  5.     unsigned int buf[MAX_NUM]; 
  6.     unsigned int i,j; 
  7.     for (i=0; i<MAX_NUM; i++) 
  8.     buf[i] = i; 
  9.     for (i=2; i<MAX_NUM; i++) 
  10.     { 
  11.         if (buf[i] != 0) 
  12.         { 
  13.             for (j=i+i; j<MAX_NUM; j+=i) 
  14.                 buf[j] = 0; 
  15.         } 
  16.     } 
  17.  
  18.     for (i=2; i<MAX_NUM; i ++) 
  19.     { 
  20.         if (buf[i] != 0) 
  21.             printf(" %d ",buf[i]); 
  22.     } 
  23.     return 0; 
  24.  
2009年05月13日 星期三 14:24

所谓“筛选法”指的是“埃拉托色尼(Eratosthenes)筛法”。他是古希腊的著名数学家。他采取的方法是,在一张纸上写上1100全部整数,然后逐个判断它们是否是素数,找出一个非素数,就把它挖掉,最后剩下的就是素数。具体做法如下:
<1> 先将1挖掉(因为1不是素数)
<2> 2去除它后面的各个数,把能被2整除的数挖掉,即把2的倍数挖掉。
<3> 3去除它后面的各数,把3的倍数挖掉。
<4> 分别用45…各数作为除数去除这些数以后的各数。这个过程一直进行到在除数后面的数已全被挖掉为止。例如找150的素数,要一直进行到除数为47为止。

 

 

原文地址:http://hi.baidu.com/xiexianyu/blog/item/4c3630b320b4f3afd8335a64.html