题目链接: sdutoj 1468 求素数
高效率求素数
/*
* 作者 仪冰
* QQ 974817955
*
* 【题目描述】
* 求小于n的所有素数的数量
*
*【思路】把2-1000000的数先认为是素数,然后遍历一遍,如果他是素数,那么他的倍数就不是素数
*/
#include <stdio.h>
#include <math.h>
#define SIZE 1000000
int Prime[SIZE];
void JudgePrime(); //找出从2到1000000的所有素数
int main()
{
int n; //素数n
int i;
int sum; //小于n的所有素数的数量
JudgePrime(); //找出从2到1000000的所有素数
while (scanf("%d", &n))
{
if (n == 0)
{
break;
}
if (n <= 2)
{
printf("0\n");
continue;
}
sum = 0;
for (i=2; i<n; i++)
{
if (Prime[i] == 1)
{
sum++;
}
}
printf("%d\n", sum);
}
return 0;
}
void JudgePrime()
{
Prime[0] = 0;
Prime[1] = 0;
int i, j;
for (i=2; i<SIZE; i++)
{
Prime[i] = 1;
}
for (i=2; i<SIZE; i++)
{
if (Prime[i] == 1)
{
for (j=i*2; j<SIZE; j+=i)
{
Prime[j] = 0;
}
}
}
}