打表#include <iostream>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
#define MAXN 1111111
int H[MAXN+1];
void init()
{
memset(H, 0,sizeof(H));
//+4确保每个数都是H-PRIME
for( int i = 5; i < MAXN; i+= 4)
{
for( int j = 5; j < MAXN ; j+= 4)
{
int res = i * j;
if(res >= MAXN)
break;
//i,j都是H-PRIME
if(H[i] == 0 && H[j] == 0)
H[res] = 1;
else
H[res] = -1;
}
}
int k = 0;
for( int i = 5; i < MAXN; i++)
{
if(H[i] == 1)
++k;
H[i] = k;
}
}
int main()
{
init();
int n;
while(scanf("%d",&n) != EOF && n)
{
printf("%d %d\n",n, H[n]);
}
}
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
#define MAXN 1111111
int H[MAXN+1];
void init()
{
memset(H, 0,sizeof(H));
//+4确保每个数都是H-PRIME
for( int i = 5; i < MAXN; i+= 4)
{
for( int j = 5; j < MAXN ; j+= 4)
{
int res = i * j;
if(res >= MAXN)
break;
//i,j都是H-PRIME
if(H[i] == 0 && H[j] == 0)
H[res] = 1;
else
H[res] = -1;
}
}
int k = 0;
for( int i = 5; i < MAXN; i++)
{
if(H[i] == 1)
++k;
H[i] = k;
}
}
int main()
{
init();
int n;
while(scanf("%d",&n) != EOF && n)
{
printf("%d %d\n",n, H[n]);
}
}