埃拉托斯特尼筛子法
理解起来还是很好理解的,自然数可分成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;
浙公网安备 33010602011771号