约分术:更相减损——老祖宗的辗转相除法
方田章第十四题——把十二分之十八约成最简分数。今人学了约分就忘,古人却把它当成一个专门的「术」来研究。更相减损术里藏着欧几里得算法的核心思想,两千年前的中国古人已经掌握了求最大公约数最朴素的方法,比西方早了不止一个时代。
原文
今有十八分之十二。问约之得几何?
答曰:三分之二。
约分术曰:可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。
白话翻译
现在有分数 ,问约分后是多少?
答案:。
计算方法(约分术):如果分子分母都可以被 2 整除,就先除以 2。如果不行,就把分子和分母分别放在两边,用大的减去小的,反复相减,直到两边相等。这个相等的数就是"等数"(最大公约数)。用这个等数来约分。
示意图
数学解读
1. 这道题到底在说什么?
约分,太简单了,一个小学生都会。分子分母同时除以 6,得到 。
但《九章》的解法不是"找最大公约数",而是一步一步减:
然后 。
今人看到这一步可能会觉得"多此一举",但这里面藏着中国古代数学的一个核心思想——用操作代替定义。
2. 更相减损术就是欧几里得算法
欧几里得算法(辗转相除法)是这么写的:
用除法:,,所以最大公约数是 6。
更相减损术是这么写的:
用减法:18 - 12 = 6,12 - 6 = 6,两数相等,所以等数是 6。
两个方法本质是一样的——欧几里得算法是"用除法一步到位",更相减损术是"用减法一步步来"。减法的效率当然不如除法,但思想完全一致。实际上,欧几里得在《几何原本》中用的也是减法的形式(第七卷命题2),和《九章算术》的"更相减损"如出一辙。
东西方在同一个时代、用不同的语言,想出了同一个方法。 这本身就是数学史上最迷人的巧合之一。
3. 为什么叫"更相减损"?
"更相"就是互相,"减损"就是减少。你减我、我减你,轮流来,直到相等。
这个翻译非常形象——不是一个人在玩,是两个人互相较劲。
- 第 1 步:大数减小数(18 - 12)
- 第 2 步:结果 6 和 12 再次比较,大数减小数(12 - 6)
- 第 3 步:结果 6 和 6 相等,停止
每一步都让两个数更接近,最终相等。
4. "可半者半之"——先除 2 加速
约分术的第一句话是"可半者半之"——如果分子分母都是偶数,就先除以 2。
这个优化很聪明。因为 2 是最常见的公因数,先处理掉,后面的减法次数就少了。比如 12 和 18,先都除以 2 得到 6 和 9,然后 9 - 6 = 3,6 - 3 = 3,等数 3,再乘以刚才除掉的 2,得到 6。
古人的算法不是"最优"的,但它是实用的、可操作的。几千年的数学,就是在这种"够用就行"和"精益求精"之间反复博弈的过程。
5. 从"约分"到"分数基本性质"
分数约分的本质,是分数的基本性质:
分子分母同时除以同一个非零数,分数值不变。
这个性质在《九章算术》里没有明确写出来——古人不说"性质",只说"术"(怎么做)。但两千年的数学教育告诉我们,知道"为什么不能约分"比"会约分"更重要。
高中课本关联
数论入门
最大公约数(GCD)是数论的基础概念。虽然高中数学不专门讲数论,但多项式的最大公因式、整式的约分,思维逻辑和这里一模一样。
和 完全是同一套思路——找公因式,再约掉。
编程中的欧几里得算法
如果学生学了编程,第一个算法题往往就是"求两个数的最大公约数"——老师会教递归写法:
这个递归的每一步,都在重复《九章算术》里"更相减损"的逻辑。两千年前写在竹简上的算法,今天写在每一本计算机教材里。
数学归纳法的萌芽
"更相减损"的过程,其实是一个归纳过程:
- 如果 ,等数就是
- 如果 ,问题转化为求 和 的最大公约数
- 每次转化都让数字变小,有限步终止
这不是数学归纳法本身,但它已经隐含了"递归"和"有限步终止"的思想。高三学生学数学归纳法的时候,知道更相减损术这个例子,会更容易理解"为什么归纳法有效"。
思考与拓展
- 用更相减损法求 91 和 49 的最大公约数(试试看,和第 15 题答案对不对得上)
- 更相减损法和辗转相除法,哪个效率更高?如果数字很大(比如 100000 和 1),用减法要减多少步?
- 三数求公约数:"可半者半之"的逻辑能不能推广到三个数?比如 12、18、24 的最大公约数?
一句话总结
约分术不是"约分"本身,而是"找最大公约数"的方法——更相减损,用减法代替除法,两千年前的古人和今天的计算机用着同一个算法。