具体筛法是:先把n个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去。这样一直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超过N的全部质数。因为希腊人是把数写在涂腊的板上,每要划去一个数,就在上面记以小点,寻求质数的工作完毕后,这许多小点就像一个筛子,所以就把埃拉托斯特尼的方法叫做“埃拉托斯特尼筛法”,简称“筛法”。
下面是代码:
1 #include
2 #include
3 #include
4 #include
5 int main(int argc, char * argv[])
6 {
//寻找2~num之间的所有素数
7 if(argc < 2)
8 {
9 printf("Usage : %s num\n", argv[0]);
10 return 0;
11 }
12 int iMax = atoi(argv[1]);
13
14 if(iMax < 2)
15 {
16 printf("num is too little, num >=2");
17 return 0;
18 }
19
20 char *p = (char *)malloc(sizeof(char) * iMax + 1);
21 bzero(p, sizeof(char) * iMax + 1);
22
23 int i = 0, j = 0, k = 0;
24 for(i = 2; i |