每个人的Python:数学、算法和游戏编程训练营
上QQ阅读APP看书,第一时间看更新

3.3.1 算法实现——四平方数和定理

这道题乍看起来很简单,但是使用编程解决其实并不容易。其实这道题是一道非常经典的数学问题,要解决这个问题,首先需要了解一个数学定理:四平方数和定理。

四平方数和定理又称拉格朗日四平方数和定理,由拉格朗日最终解决,四平方数和定理可以证明:任何正整数均可表示为4个整数的平方和(其中允许有整数为0)。四平方数和定理还有一个重要的推论:如果一个数n只能使用4个非零的完全平方数的和表示,则这个数n一定满足4a(8b+7)。

通过四平方数和定理的描述可以断言,若找到若干个完全平方数的和可以等于它,则这些完全平方数的最少数量有4种情况,即1、2、3、4。结合本题,要找到最终的答案,我们可以采用下面的算法:

(1)先假设组成这个数n的完全平方数的个数最少为4,则数n必定满足n = 4a(8b+7)。首先对这个等式进行检查,如果检查通过,则最终答案为4,否则继续执行算法。

(2)假设组成这个数n的完全平方数的个数最少为1,则数n可以表示为某个正整数的平方,遍历查找,如果找不到,则继续执行算法。

(3)假设组成这个数n的完全平方数的个数最少为2,使用循环嵌套进行遍历查找,若找不到,则继续执行算法。

(4)算法执行到此,则最终答案为3。