1. 如何分土地
有这样一个问题:如何把一块1680×640的土地均匀的分成正方形,并且保证分出的正方形面积是最大的?
思考一下,这个问题其实可以转变为一个我们十分熟悉的问题:求1680与640的最大公约数。当土地可以被分成正方形时,正方形的小土地边长一定是被划分的大土地两条边的公约数,这样就很明白了。
在高中课程中我们就明白可以通过所谓的“辗转相除法”求得这个值,但是现在我们了解了一些的编程的概念以后,会发现所谓的“辗转相除法”是很典型的算法——确实是这样,因为辗转相除法又叫欧几里得算法。
我们高中的时候应该都用过这个方法,但我并没有记住这个方法的正确性是如何推导出来的。没有这一点的保证,我们就无法解决上面的分土地的问题,所以我们先尝试证明这个算法为什么是正确的。
2. 欧几里得算法的运算过程:
先让我们回顾一下欧几里得算法,假设这种方法正确,然后求出16和12的最大公约数(我们知道是4)。
我们先选择两个数中最小的那个数12,用大数除以小数:16 / 12 = 1 余 4,余数不为0,则选择余数4和小数12,用较小数除以余数:12 / 4 = 3 余 0,这是余数为0,我们就选择除数4,它就是我们要求的最大公约数。
在这个过程中,我们其实默认了12和4的最大公约数等于16和12的最大公约数。将这个想法运用到分土地的问题中,我们有1680和640,根据假设两个整数的最大公约数等于较小数与两数余数的最