求小于n的所有素数的数量。
多组输入,输入整数n(n<1000000),以0结束。
输出n以内所有素数的个数。
10 0
4
以这道题目为例,要找出n以内的素数, n<=1000000.
为了节省时间,用素数筛 先把1000000以内的素数全部标记出来!
此素数筛核心算法代码:
这样跑完这个代码,是素数的会标记为0, 不是素数的标记为1。 数据处理完毕!
int f[1000004];
int i, j;
memset(f, 0, sizeof(f));
f[1]=1 ; //标记1的不是素数 标记0的是素数
i=2;
while(i<=500000)
{
for(j=i*2; j<=1000000; j+=i )
{
f[j]=1;
}
i++;
while(f[i]==1)
{
i++;
}
}
#include <stdio.h>
#include <string.h>
int f[1000004];
int main()
{
int n;
int i, j;
memset(f, 0, sizeof(f));
f[1]=1 ; //标记不是
i=2;
while(i<=500000)
{
for(j=i*2; j<=1000000; j+=i )
{
f[j]=1;
}
i++;
while(f[i]==1)
{
i++;
}
}
int k, cnt;
while(scanf("%d", &n) && n!=0 )
{
cnt=0;
for(k=1; k<n; k++)
{
if(f[k]==0)
cnt++;
}
printf("%d\n", cnt );
}
return 0;
}
原文:http://www.cnblogs.com/yspworld/p/3959148.html