用C语言实现素数筛法获取一亿(100000000)以内的全部素数
2014-10-31 17:14
721 查看
具体筛法是:先把n个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去。这样一直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超过N的全部质数。因为希腊人是把数写在涂腊的板上,每要划去一个数,就在上面记以小点,寻求质数的工作完毕后,这许多小点就像一个筛子,所以就把埃拉托斯特尼的方法叫做“埃拉托斯特尼筛法”,简称“筛法”。
下面是代码:
输出结果放在百度网盘 :http://pan.baidu.com/s/1pJv58Wb
作者:风波
mail : fengbohello@qq.com
下面是代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char * argv[]) { //寻找2~num之间的所有素数 if(argc < 2) { printf("Usage : %s num\n", argv[0]); return 0; } int iMax = atoi(argv[1]); if(iMax < 2) { printf("num is too little, num >=2"); return 0; } char *p = (char *)malloc(sizeof(char) * iMax + 1); memset(p, sizeof(char) * iMax + 1, 0); int i = 0, j = 0, k = 0; for(i = 2; i <= iMax; i++) { for(j = i + i; j <= iMax; j += i) { p[j] = 1; } } FILE * fp = NULL; //程序执行完成后,文件 prime-number.txt中就是我们需要的素数 if((fp = fopen("prime-number.txt", "w")) == NULL) { return 0; } k = 0; int iAll = 0; for(i = 2; i <= iMax; i++) { if(0 == p[i]) { iAll ++; k++; // output to file : fp,把这些素数写入文件 fprintf(fp, "%6d ", i); if(10 == k) { fprintf(fp, "\n"); k = 0; } //printf("%d ", i); } } printf("\n"); fclose(fp); free(p); printf("all : %d\n", iAll); return 0; }
输出结果放在百度网盘 :http://pan.baidu.com/s/1pJv58Wb
作者:风波
mail : fengbohello@qq.com
相关文章推荐
- 【VC6.0】素数筛法获取全部素数(埃拉托斯特尼筛法)
- C语言实现打印1000以内素数的三种基本方法
- 输入出100~300之间的全部素数。(C语言)
- 打印出100以内的素数(Java实现)
- 获取IE地址栏的URL(C语言实现)
- 获取系统进程快照 c语言实现
- 输出一百以内的全部素数
- 判断素数问题(C语言实现)
- 获取时区方法(C语言实现)
- 一亿数据获取前100个最大值(利用quicksort的原理实现) [# 70]
- 一亿数据获取前100个最大值(利用quicksort的原理实现)
- 【Coding】用筛法求素数的C++实现(附100000以内素数表)
- 在WM5以上系统使用Notification Broker机制实现获取全部电话状态
- 【汇编】命令行下获取用户输入,实现类似C语言fgets函数功能
- 编写一个应用程序求1000以内的全部素数。完数
- 用C语言和汇编语言实现将1个整数分解成几个素数的乘积
- 用C语言实现硬件信息的获取
- C语言实现获取LINUX当前时间
- 半秒内筛一亿以内的所有素数
- C语言获取文件长度及全部内容