|
发表于 2011-7-24 16:36:17
|
显示全部楼层
冬冬 发表于 2011-7-23 22:44
我一直纳闷的是,我给你的代码添加了一个PrintTable函数,打印了2 - 100之间的素数,如下图。但是这个 ...
我在你修改仰望天上的光的基础,又进行了一点调整,可以统计极品素数的个数并输出预期的极品素数。
- #include <stdio.h>
- #include <stdlib.h>
- #define NUMS 100000
- #define SQRT_NUMS 318
- static int vec[NUMS+1];
- /*
- 筛法求素数
- (1)vec[i]==0则i为素数
- (1)vec中下标为偶数的肯定不是素数
- */
- void initTable();
- //计算极品素数的个数
- int count(int n);
- void PrintAndCount(int n)
- {
- /* for(int i = 2;i <= n; i++)
- {
- if(vec[i] == 0)
- printf("%d\t",i);
- }
- printf("\n");*/
- int result = 0;
- int priNumber = 2;
- for(int i = 3; i <= n; i++)
- {
- if(vec[i] == 0)
- {
- if(i % 2 && vec[priNumber] == 0)
- {
- printf("%d\t", i);
- result++;
- }
- priNumber++;
- }
- }
- printf("\n共有%d个极品素数\n", result);
- }
- int main(int argc, char **argv)
- {
- int number;
- initTable();
- while(scanf("%d", &number) != EOF)
- {
- if(number == -1)
- break;
- PrintAndCount(number);
- }
- system("pause");
- return 0;
- }
- void initTable()
- {
- int i ,j, k;
- for(k = 4; k <= NUMS; k += 2)
- {
- vec[k] = 1;
- }
- for(i = 3; i <= SQRT_NUMS; i += 2)
- {
- if(vec[i] == 0)
- {
- for(j = i * i; j <= NUMS; j += 2 * i)
- vec[j] = 1;
- }
- }
- }
复制代码
|
|