埃拉托斯特尼筛子法

理解起来还是很好理解的,自然数可分成1、素数、合数这三类,一定范围内的自然数中,哪些数是素数呢?古时候,希腊有位叫做埃拉多染尼的数学家想出了如下办法:当时,他将1000内的自然数依次写在一块硬方格板上,然后用2试除各数,将能被整除的都用刀子剜掉;继2之后再用3来如此而行;3之后再用5来如此而行……这样一直进行到无法进行而为止,最后再剜掉1。于是,剩下的没能被剜掉的数便是1000内的素数。

程序就是这样 

 1 int i;
 2     int a[10000];
 3     for(i = 2 ;i < 10000;i++)
 4         a[i] = 1;
 5     a[0] = a[1] = 0;
 6     
 7     for(i = 2; i < sqrt(10000); i++)//从2开始遍历有根号的,然后依次向后加i,
 8                 if(a[i] == 1)
 9                 for(j = i * i; j < 10000; j+=i)//从i* i开始因为2,3,等不是合数,因此
10                     a [j]= 0;

posted on 2013-02-10 00:47  yelcoved  阅读(190)  评论(0)    收藏  举报