蓝桥杯--四平方和
问题描述
四平方和定理,又称为拉格朗日定理:每个正整数都可以表示为至多四个正整数的平方和。如果把0包括进去,就正好可以表示为四个数的平方和。
比如:
5=0*0+0*0+1*1+2*2
7=1*1+1*1+1*1+2*2
则对于一个给定的正整数n,可以表示为:n = a^2 + b^2 + c^2 + d^2
你需要求出 字典序 最小的一组解 a,b,c,da,b,c,d。
输入格式
程序输入为一个正整数 (N<=5000000)
输出格式
输出四个非负整数 a,b,c,d中间用空格分开。
样例输入1
5
样例输出1
0 0 1 2
样例输入2
12
样例输出2
0 2 2 2
C语言代码
#include<stdio.h> #include<stdlib.h> using namespace std; int main(){ int n; scanf("%d",&n); for(int a=0;a<2500;a++){ for(int b=0;b<2500;b++){ for(int c=0;c<2500;c++){ for(int d=0;d<2500;d++){ if(a*a+b*b+c*c+d*d==n){ printf("%d %d %d %d\n",a,b,c,d); exit(0); } } } } } return 0; } 运行超时!!!
#include<stdio.h> #include<stdlib.h> #include<math.h> using namespace std; int main(){ int n,d1; double d; scanf("%d",&n); for(int a=0;a<=sqrt(n);a++){ for(int b=0;b<=sqrt(n);b++){ for(int c=0;c<=sqrt(n);c++){ d=n-(a*a+b*b+c*c); d1=int(sqrt(d)); if(d==d1*d1){ printf("%d %d %d %d",a,b,c,d1); exit(0); } } } } return 0; } 运行正常