素数筛选法
- #include <stdio.h>
-
- #define MAX_NUM 100000
- int main(int argc, char *argv[])
- {
- unsigned int buf[MAX_NUM];
- unsigned int i,j;
- for (i=0; i<MAX_NUM; i++)
- buf[i] = i;
- for (i=2; i<MAX_NUM; i++)
- {
- if (buf[i] != 0)
- {
- for (j=i+i; j<MAX_NUM; j+=i)
- buf[j] = 0;
- }
- }
-
- for (i=2; i<MAX_NUM; i ++)
- {
- if (buf[i] != 0)
- printf(" %d ",buf[i]);
- }
- return 0;
-
- }
2009年05月13日 星期三 14:24
所谓“筛选法”指的是“埃拉托色尼(Eratosthenes)筛法”。他是古希腊的著名数学家。他采取的方法是,在一张纸上写上1到100全部整数,然后逐个判断它们是否是素数,找出一个非素数,就把它挖掉,最后剩下的就是素数。具体做法如下:
<1> 先将1挖掉(因为1不是素数)。
<2> 用2去除它后面的各个数,把能被2整除的数挖掉,即把2的倍数挖掉。
<3> 用3去除它后面的各数,把3的倍数挖掉。
<4> 分别用4、5…各数作为除数去除这些数以后的各数。这个过程一直进行到在除数后面的数已全被挖掉为止。例如找1~50的素数,要一直进行到除数为47为止。
原文地址:http://hi.baidu.com/xiexianyu/blog/item/4c3630b320b4f3afd8335a64.html