四平方和定理,又称为拉格朗日定理: 每个正整数都可以表示为至多4个正整数的平方和。 如果把0包括进去,就正好可以表示为4个数的平方和。
比如: 5 = 0^2 + 0^2 + 1^2 + 2^2
7 = 1^2 + 1^2 + 1^2 + 2^2 (^符号表示乘方的意思)
对于一个给定的正整数,可能存在多种平方和的表示法。 要求你对4个数排序: 0 <= a <= b <= c <= d 并对所有的可能表示法按 a,b,c,d 为联合主键升序排列,最后输出第一个表示法。
输入格式:
程序输入为一个正整数N (N<5000000)。
输出格式:
请在这里描述输出格式。例如:对每一组输入。
输入样例:
例如,输入:
5
输出样例:
在这里给出相应的输出。例如:
0 0 1 2
c语言实现代码:
#include<stdio.h>
#include <math.h>
int main()
{
int n,p;
int m,sum=0;
int count=0;
scanf("%d",&n);
m=n;
while(m!=0){
m=(int)sqrt(n);
printf("%d ",m);
count++;
p=pow(m,2);
sum+=p;
m=n-p;
n=m;
}
while(count<4)
{
printf("0 ");
count++;
}
}
结果:
5
2 1 0 0
此结果与要求实现的结果顺序相反,这说明程序需继续改进,我打算将输出结果放在数组里面重新输出。
#include<math.h>
#include <stdio.h>
int main()
{
int n,a,b,c,d;
scanf("%d",&n);
int sqn = int(sqrt(n));
for(a=0;a<=sqn;++a)
{
for(b=a;b<=sqn;++b)
{
for(c=b;c<=sqn;++c)
{
d=sqrt(n-a*a-b*b-c*c);
if(n==a*a+b*b+c*c+d*d)
{
if(c>d)
{
int temp=d;
d=c;
c=temp;
}
printf("%d %d %d %d\n",a,b,c,d);
return 0;
}
}
}
}
}
上面代码是在网上借鉴的。
本文探讨了四平方和定理(拉格朗日定理)的实现,该定理指出任何正整数都能表示为四个整数的平方和。通过两段C语言代码示例,展示了如何找出表示特定正整数的最小平方和组合,并按升序输出。
5191

被折叠的 条评论
为什么被折叠?



