用C语言实现素数筛法获取一亿(100000000)以内的全部素数

简介:

具体筛法是:先把n个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去。这样一直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超过N的全部质数。因为希腊人是把数写在涂腊的板上,每要划去一个数,就在上面记以小点,寻求质数的工作完毕后,这许多小点就像一个筛子,所以就把埃拉托斯特尼的方法叫做“埃拉托斯特尼筛法”,简称“筛法”。

下面是代码:

复制代码
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 #include <strings.h>
 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 <= iMax; i++) 25 { 26 for(j = i + i; j <= iMax; j += i) 27 { 28 p[j] = 1; 29 } 30 } 31 FILE * fp = NULL;
//程序执行完成后,文件 prime-number.txt中就是我们需要的素数
32 if((fp = fopen("prime-number.txt", "w")) == NULL) 33 { 34 return 0; 35 } 36 k = 0; 37 int iAll = 0; 38 for(i = 2; i <= iMax; i++) 39 { 40 if(0 == p[i]) 41 { 42 iAll ++; 43 k++; 44 // output to file : fp,把这些素数写入文件 45 fprintf(fp, "%6d ", i); 46 if(10 == k) 47 { 48 fprintf(fp, "\n"); 49 k = 0; 50 } 51 //printf("%d ", i); 52 } 53 } 54 printf("\n"); 55 fclose(fp); 56 free(p); 57 printf("all : %d\n", iAll); 58 59 return 0; 60 }
复制代码

 

输出结果放在百度网盘 :http://pan.baidu.com/s/1pJv58Wb

 


本文转自郝峰波博客园博客,原文链接:http://www.cnblogs.com/fengbohello/p/4065540.html,如需转载请自行联系原作者

相关文章
|
1月前
|
C语言
C语言之完数、素数、回文数合集
C语言之完数、素数、回文数合集
|
2月前
|
C语言
【01】判断素数/质数(C语言)
【01】判断素数/质数(C语言)
|
4月前
|
C语言
C语言Oj题判断素数几种方式详解
输入一个数判断它是不是素数,并且不是的情况把它打印出来不是素数。
|
5月前
|
C语言
c语言编程练习题:7-33 统计素数并求和
c语言编程练习题:7-33 统计素数并求和
23 0
|
2月前
|
C语言
【C语言】输入一个数n,输出从n到n+100的范围内所有的素数,并统计素数的个数
【C语言】输入一个数n,输出从n到n+100的范围内所有的素数,并统计素数的个数
25 0
|
9天前
|
C语言
【C语言必刷题】4. 打印100~200之间的素数
【C语言必刷题】4. 打印100~200之间的素数
|
2月前
|
算法 C语言
C语言判断素数
C语言判断素数
15 0
|
4月前
|
C语言
【C 语言经典100例】C 练习实例36 - 求100之内的素数
【C 语言经典100例】C 练习实例36 - 求100之内的素数
18 0
|
4月前
|
C语言
【C 语言经典100例】C 练习实例33 - 质数(素数)判断
【C 语言经典100例】C 练习实例33 - 质数(素数)判断
18 0
|
10月前
|
算法 C语言
【C语言】判断一个数是否为素数(素数求解的N种境界)(下)
【C语言】判断一个数是否为素数(素数求解的N种境界)(下)
72 0