首页 > 代码库 > 用C语言实现素数筛法获取一亿(100000000)以内的全部素数
用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 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 memset(p, sizeof(char) * iMax + 1, 0);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
作者:风波
mail : fengbohello@qq.com
用C语言实现素数筛法获取一亿(100000000)以内的全部素数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。