求素数
Problem Description
求小于n的所有素数的数量。(素数筛概念)
Input
多组输入,输入整数n(n<1000000),以0结束。
Output
输出n以内所有素数的个数。
Example Input
10 0
Example Output
4
代码如下:
#include<stdio.h>
#include<string.h>
#include<math.h>
#define Max 1000000
bool prime[Max];
void IsPrime()
{
prime[0]=prime[1]=0;
prime[2]=1;
for(int i=3; i<Max; i++)
prime[i]=i%2==0?0:1;
int t=(int)sqrt(Max*1.0);
for(int i=3; i<=t; i+=2)
for(int j=i*i; j<Max; j+=2*i) //优化
prime[j]=0;
}
int main()
{
IsPrime();
int n;
while(~scanf("%d",&n)&&n)
{
int s=0;
for(int i=0; i<n; i++)
if(prime[i]) s++;
printf("%d\n",s);
}
return 0;
}