求素数
Time Limit: 100ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
求小于n的所有素数的数量。
输入
多组输入,输入整数n(n<1000000),以0结束。
输出
输出n以内所有素数的个数。
示例输入
10 0
示例输出
4
素数筛选法,#define一个数据范围,在1到这个范围内的非素数划掉,方法是设一个同等大小的标记数组,从2开始,2没有被标记,所以从2到此范围内2的倍数全都被标记上为0,依次类推直到没有非素数。
素数特征:从1到n-1内没有能被它整除的数,且素数不包括负数,1和0都不是素数。
#include<stdio.h>
#define MAX 1001000
int p[MAX/3];
bool f[MAX];
int get()
{
int k=0;
for(int i=2;i<MAX;i++)
{
if(!f[i]) p[k++]=i;
for(int j=0;j<k && i*p[j] < MAX;j++)
{
f[i*p[j]]=1;
if(i%p[j]==0)
break;
}
}
return k;
}
int main()
{
int i,n;
int k=get();
while(~scanf("%d",&n) && n)
{
for(i=0;i<k;i++)
{
if(p[i]>n)
break;
}
printf("%d\n",i);
}
return 0;
}