模仿埃氏筛法走一发。
#include <stdio.h>
#include <string.h>
const int MAXN = 1001000;
int isPrime[MAXN];
int prime[MAXN];
int mark[MAXN];
int cnt[MAXN];
int plen = 0;
void init()
{
for(int i = 5; i < MAXN; i += 4)
{
if(!isPrime[i])
{
prime[plen++] = i;
for(int j = i*5; j < MAXN; j += 4*i)
isPrime[j] = 1;
}
}
for(int i = 0; i < plen; ++i)
{
for(int j = 0; j <= i; ++j)
{
if(prime[i]*prime[j] > MAXN) break;
mark[prime[i]*prime[j]] = 1;
}
}
for(int i = 1; i < MAXN; ++i)
cnt[i] = cnt[i-1]+mark[i];
}
int main()
{
init();
int num;
while(scanf("%d",&num) && num)
{
printf("%d %d\n",num,cnt[num]);
}
return 0;
}