埃拉托斯特尼筛子法

it2022-05-09  18

理解起来还是很好理解的,自然数可分成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;

转载于:https://www.cnblogs.com/yelcoved/archive/2013/02/10/2909700.html


最新回复(0)