题目链接:http://poj.org/problem?id=3292
题意:
H-number:4n+1
H-prime:H-number并且只有两个H-number因子1和他本身
H-semi-number:为两个H-number数的乘积
H-semi-prime:H-prime&&H-semi-number
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
const int INF=0x3f3f3f3f;
const int maxn=1000010;
int n,pNum;
int Hnumber[maxn];
void HnumberTable(){
memset(Hnumber,0,sizeof(Hnumber));
for(int i=5;i<maxn;i+=4){
for(int j=5;j<maxn;j+=4){
if(i*j>1000010) break;
if(!Hnumber[i]&&!Hnumber[j])
Hnumber[i*j]=1;
else
Hnumber[i*j]=2;
}
}
int hNum=0;
for(int i=1;i<maxn;i++){
if(Hnumber[i]==1)
hNum++;
Hnumber[i]=hNum;
}
}
int main(){
#ifndef ONLINE_JUDGE
freopen("test.in","r",stdin);
freopen("test.out","w",stdout);
#endif
HnumberTable();
while(~scanf("%d",&n)&&n){
printf("%d %d\n",n,Hnumber[n]);
}
return 0;
}