我正在给Q
查询,在每个查询中我得到一个数字N
,我必须输出三个整数,使得三个整数的平方和等于N
For Ex:
3
5
13
Ans:
1,1,1 (1^2+1^2+1^2)
2,1,0 (2^2+1^2+0^2)
3 2 0 (3^2+2^2+0^2)
我的方法:
Legendre's three-square theorem
Solution(Num):
if Num in form 4^a*(8b+7) return No
for(i=Math.sqrt(Num);j>=0;j--){
Rem = Num-j*j;
for(k=Math.sqrt(Rem);k>=0;k--){
Rem2 = Rem-k*k;
double X = Math.sqrt(Rem2);
if(X==(long)X) return Found
}
但我的解决方案正在向我TLE
,由于N
最高为10^15
且Q
高达10^5
,我该如何改进我的解决方案?我可以进行某种预处理吗?
对于N
小于10 ^ 6,我可以通过预处理在O(1)
时间给出答案,但是如何处理大数字。