题目:四平方和定理,又称为拉格朗日定理。每个整数都能表示为至多4个数的平方和。如果把0算进去,就正好可以表示为4个数的平方和。对于给定的一个正整数,可能存在多种平方和的表示方法。要求你对4个数进行排序:0<=a<=b<=c<=d,并对所有的可能表示法按a,b,c,d为联合主键升序排列,最后输出第一个表示法。程序输入为一个整数N(N<5 000 000),要求输出4个非负整数,按从小到大排列,中间用空格分开。
例如,输入773535 输出 1 1 267 838
程序说明:
因为涉及到平方和,因此这里需要导入math库,运用到sqrt。此程序采用先从0开始,若第四位数的平方不能满足等于目标数,则开始从第三位开始进行数字的增加,若通过判断发现第三位和第四位各平方相加还是小于目标数,则开始进行第二位数字的增加…若最后四个位置的数平方相加后等于目标数,则直接输出它们即可
全部代码:
import math
n = int(input())
a = 0
while a ** 2 <= n:
b = a
while a ** 2 + b ** 2 <= n:
c = b
while a ** 2+ b ** 2 + c ** 2 <= n:
d = int(math.sqrt(n - a ** 2 - b ** 2 - c ** 2))
if a ** 2 + b ** 2 + c ** 2 + d ** 2 == n:
print(a, b, c, d)
break
c += 1
b += 1
a += 1