这不比哈希好用?
#include<bits/stdc++.h>
using namespace std;
int re[3000*3000];
int n, cnt;
int main()
{
cin >> n;
for(int i = 0; i * i <= n; i ++)
for(int j = i; j * j <= n - i * i; j ++)
if(!re[i*i+j*j]) re[i*i+j*j] = i + 1;
for(int i = 0; i * i <= n; i ++)
for(int j = i; j * j + i * i <= n; j ++)
if(re[n-i*i-j*j])
{
cout << i << ' ' << j << ' '
<< re[n-i*i-j*j] - 1 << ' '
<< sqrt((n-i*i-j*j)-(re[n-i*i-j*j]-1)*(re[n-i*i-j*j]-1));
return 0;
}
}