这题没什么意思。
但是注意如果对每个测试用例都遍历数组计算结果会超时。
用备忘录循环一次记录每个h值得结果。
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <math.h>
using namespace std;
#define L 1000010
int h;
int prime[L];
void process(){
cout<<h<<" "<<prime[h]<<endl;
}
int main(){
for(int i=5;i<=L;i+=4)
for(int j=5;j<=L;j+=4){
int t = i*j;
if(t>L)
break;
if(prime[i]==0 && prime[j]==0)
prime[t] = 1;
else
prime[t] = -1;
}
int count = 0;
for(int i=5;i<=L;i+=4){
if(prime[i]==1)
++count;
prime[i] = count;
}
while(true){
cin>>h;
if(h==0)
break;
process();
}
return 0;
}