打一下表,预处理一下,没有什么难度了。
#include "iostream"
using namespace std;
#define MAXN 1000005
int h[MAXN];
void hnumbers()
{
memset(h, 0, sizeof(h));
for (int i = 5; i <= 1000001; i += 4) {
for (int j = 5; j <= 1000001; j += 4) {
if (i * j > 1000001)
{
break;
}
else
{
if (h[i] == 0 && h[j] == 0) {
h[i*j] = 1;//h-semi
}
else h[i*j] = -1;//h-combo
}
}
}
int countt = 0;
for (int i = 0; i <= 1000001; i++) {
if (h[i] == 1) {
countt++;
}
h[i] = countt;
}
}
int main()
{
hnumbers();
int n;
while (cin>>n && n)
{
cout << n << ' ' << h[n] << endl;
}
}