//先处理数组中的平方数,标记为1,然后再遍历一遍,两个平方数和的数标记为2,3个的和的数标记为3,剩下的为4
#include <iostream>
using namespace std;
#define N 60001
int s[N] = {0};
int main(){
for(int i=1;i*i<N;i++){
s[i*i] = 1;
}
for(int i=1;i<N;i++){
if(s[i] == 0){
for(int j=1;j*j<i;j++){
if(s[i - j*j] == 1){
s[i] = 2;
break;
}
if(s[i - j*j] == 2){
s[i] = 3;
}
}
}
}
int t,n;
cin>>t;
while(t--){
cin>>n;
if(s[n]){
cout<<s[n]<<endl;
}
else cout<<'4'<<endl;
}
return 0;
}
sicily2499
最新推荐文章于 2017-12-20 22:06:30 发布