用三个方格表示一个数字

时间:2017-01-12 19:32:29

标签: algorithm math numbers square number-theory

我正在给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^15Q高达10^5,我该如何改进我的解决方案?我可以进行某种预处理吗?

对于N小于10 ^ 6,我可以通过预处理在O(1)时间给出答案,但是如何处理大数字。

0 个答案:

没有答案