四平方和

来源:互联网 发布:纳斯达克100基金 知乎 编辑:程序博客网 时间:2024/05/02 18:17
四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多四个正整数的平方和。如果把 00 包括进去,就正好可以表示为四个数的平方和。


比如:


 5 = 0^2 + 0^2 + 1^2 + 2^2=0

​​ 


 7 = 1^2 + 1^2 + 1^2 + 2^2=7

​​ 


则对于一个给定的正整数 n,可以表示为:n = a^2 + b^2 + c^2 + d^2


​​ 


你需要求出 字典序 最小的一组解 a,b,c,d


字典序大小:从左到右依次比较,如果相同则比较下一项,直到有一项不同,较小的一方字典序更小,反之字典序更大,所有项均相同则二者字典序相同。



输入格式



程序输入为一个正整数 N(1≤N≤5000000)。



输出格式



输出四个非负整数 a,b,c,d中间用空格分开。



样例输入1



5

样例输出1



0 0 1 2

样例输入2



12

样例输出2



0 2 2 2

AC码:
#include<stdio.h>#include<cmath> int main(){int n,a,b,c,d;scanf("%d",&n);for(a=0;a<=sqrt(n);a++){for(b=0;b<=sqrt(n);b++){for(c=0;c<=sqrt(n);c++) {d=sqrt(n-(a*a+b*b+c*c));if(a*a+b*b+c*c+d*d==n){printf("%d %d %d %d",a,b,c,d);return 0;          }    } }}return 0;}
注意d应该通过计算得到,否则会超时