计算N以内质数的个数
2010-06-19 19:55
204 查看
总结两点:
1、注意内存分配中int是占4个字节,不能分配多少个int就直接写多少个,而要乘以int的长度大小,因为它(malloc)分配的是字节数;
2、能省则省,一开始我把isNotPrime声明为int,这样到99999999内存就太大了分配不了,后来改成char,至少节约3/4内存,可以测试更大的数;
完整代码如下,算法是网上看别人的算法:
稍微修改了下算法,在我的电脑上至少可以计算这么大的范围了:
1、注意内存分配中int是占4个字节,不能分配多少个int就直接写多少个,而要乘以int的长度大小,因为它(malloc)分配的是字节数;
2、能省则省,一开始我把isNotPrime声明为int,这样到99999999内存就太大了分配不了,后来改成char,至少节约3/4内存,可以测试更大的数;
完整代码如下,算法是网上看别人的算法:
/** * 计算2~N的质数 * skchen @ 2009-08-29 22:26 */ #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 999999999 main() { int i = 0; int *numbers; char *isNotPrime; int j = 0; int count = 0; numbers = malloc(N / 2); isNotPrime = malloc(N * sizeof(char)); for (i = 0; i < N; i++) { isNotPrime[i] = 0; if (i < (N / 8)) { numbers[i] = 0; } } for (i = 2; i < N; ++i) { if (isNotPrime[i] == 0) { numbers[count] = i; //printf("%d,", i); count++; for (j = i + i; j < N; j += i) { isNotPrime[j] = 1; } } } printf("总共%d个质数/n", count); printf("CPU运行时间:%d", clock()); free(numbers); free(isNotPrime); }
稍微修改了下算法,在我的电脑上至少可以计算这么大的范围了:
/** * 计算2~N的质数 * skchen @ 2009-08-30 04:58 */ #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 2999999999 main() { unsigned long int i = 0; //int *numbers; char *isNotPrime; unsigned long int j = 0; unsigned long int count = 0; //numbers = malloc(N / 8); isNotPrime = malloc(N * sizeof(char) / 2); for (i = 0; i < N / 2; i++) { isNotPrime[i] = 0; //if (i < (N / 32)) { // numbers[i] = 0; //} } //numbers[0] = 2; count++; for (i = 3; i < N; i += 2) { if (isNotPrime[(i - 1) / 2] == 0) { //numbers[count] = i; //printf("%d,", i); count++; if (i < N / 2) { for (j = i + i; j < N && j < N - i; j += i) { if (j % 2 == 0) { continue; } isNotPrime[(j - 1) / 2] = 1; } } } } printf("总共%d个质数/n", count); printf("CPU运行时间:%d", clock()); //free(numbers); free(isNotPrime); }
相关文章推荐
- 500以内质数(素数)的计算
- 输出100000以内的质数,并计算时间 学习笔记
- 【C++习作】用多态计算一百以内的质数
- SQL计算100以内的质数(可以把100换成任意的整数)
- 用多态计算一百以内的质数
- 计算100以内的质数或合数
- 一道经典面试题:计算n以内的素数(质数)算法
- SQL计算100以内的质数(可以把100换成任意的整数)
- C++ 笔试题简单练习----求N 以内质数 和 计算多少对质数等于N
- C++的速度比Java快2.1%:来自计算100万以内质数的实验数据对比
- 计算1到100000以内的质数
- 简单的计算100000以内的质数(JAVA实现)
- 返回100以内的质数
- 给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输入值小于1000。
- 计算1到100以内前5个能被3整除的数字
- 第9周项目1 计算一千以内偶数之和
- 1000以内的质数
- 计算2到10万有多少个素数(质数)
- 计算并输出1000以内的所有“完数”之和
- 计算质数