冬冬 发表于 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;
}
}
}
|