四平方和定理简单的来说即任意一个正整数都可用四个平方数的和表示。
问题描述:给定任意一个正整数n,找到若干个完全平方数,使他们和等于n,完全平方数的个数最少。
根据四平方和定理,答案只有1,2,3,4,4种。
这里运用到四平方和定理的推论:
若n=4^k*(8m+7),则个数为4,可以通过整除后取余判断;
若n本身等于一个数的平方,则无可厚非个数为1;
若n等于一个数的平方加剩余数的平方,则个数为2;
以上都不是则返回3;
直接放代码:
n=int(input("请输入一个正整数:"))
def IsPrefect(n):
while n%4==0:
n//=4
if n%8==7:
return 4
for i in range(n+1):
temp=i*i
if temp<=n:
if int((n-temp)**0.5)**2+temp==n:#运用到四平方和定理
return 1+(0 if temp==0 else 1)
return 3
print("完全平方数个数:",IsPrefect(n))