约分术二:更相减损——91和49的较量
方田章第十五题——把九十一分之四十九约成最简分数。91和49看起来没什么关系,但反复减下去,它们居然有共同的「根」。更相减损术的强大之处在于:它不依赖你一眼看出公因数,它像个机械的齿轮,一步一步地把答案给你转出来。
原文
又有九十一分之四十九。问约之得几何?
答曰:十三分之七。
约分术曰:可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。
白话翻译
现在又有分数 ,问约分后是多少?
答案:。
用的还是同样的方法:先看分子分母能不能同时除以 2——49 是奇数,91 也是奇数,不行。所以进入更相减损流程:把 91 和 49 分别放在两边,用大的减去小的,反复减,直到两个数相等。这个相等的数就是"等数"(最大公约数),用它来约分。
示意图
数学解读
1. 这道题和上一道有什么不同?
上一题是 ,一眼就能看出公因数是 6。这一题是 ,49 和 91 之间的公因数就没那么明显了。
49 是 ,91 呢?91 看起来不太像一个"整"数——它既不是 7 的倍数(7 × 13 = 91……等等,它确实是 7 的倍数!),但一般人在没算出来之前,不会第一时间想到 91 和 7 有关系。
这就是更相减损术的意义所在——当你一眼看不出公因数的时候,算法可以帮你找出来。 它不需要你"看出来",只需要你"一步步做"。
2. 手动走一遍这个算法
49 和 91,都是奇数,不能"半之"。开始更相减损:
所以等数是 7,于是:
验证一下:, 已经是最简分数了。
3. 7 步减法,效率问题浮现了
上面这个过程中,42 - 7 这一步做完之后,其实后面连续做了 5 次"42 - 7"的变体——实际上是在反复减 7。
如果换成欧几里得算法(辗转相除法):
只用 3 步除法,就得到了结果。
为什么会有这个差距?因为更相减损术每次只减一次,而欧几里得算法一次把能减的都减完——,相当于 91 - 49 = 42 做一次,然后 ,相当于 49 - 42 = 7 做一次,然后 ,相当于 42 - 7 - 7 - 7 - 7 - 7 - 7 = 0 做 6 次,但除法一步就得到了 0。
所以从效率上说,欧几里得算法是更相减损术的"加速版"。但古人生活在两千年前,面对的是"步"、"亩"这种级别的数字,加减法已经够用了,压根不需要考虑效率问题。
4. 为什么 91 是 7 的倍数?
这个问题看似简单,但有个数学上的观察:91 和 49 的差是 42,42 是 7 的倍数;而 49 本身也是 7 的倍数。如果两个数都是某个数的倍数,它们的差也一定是这个数的倍数。 反过来,如果两个数的差是某个数的倍数,且其中一个数也是这个数的倍数,那另一个也一定是。
这个观察就是更相减损术成立的理论基础——公因数在减法运算下保持不变:
一步减法,不改变最大公约数。反复减下去,最终两个数相等,那个相等的数就是它们的最大公约数。
这个性质太美了。每一步减法都没有"损失"信息,每一步都在缩小范围,但每一步都在保护那个"共同的根"。
5. 从"术"到"算法思维"
这道题真正让我感慨的,是《九章算术》里展现的算法思维。
什么叫算法思维?就是:不管你有没有数学直觉,只要按照步骤操作,就一定能得到正确答案。
- 你看不出 49 和 91 的公因数?没关系,按步骤来。
- 你不知道什么时候该停?按步骤来,两个数相等就停。
- 你担心算错?每一步都是简单的减法,几乎不可能出错。
这就是"术"的魅力——它是可复制的、机械的、确定性的。任何一个人,只要识数、会减法,就能把这道题算出来。
中国古代数学的"术",本质上就是今天的算法。而算法思维,是计算机科学的核心。两千年前写在竹简上的算法,今天用 Python 写出来,逻辑一模一样。
高中课本关联
算法与程序框图(必修三)
高中必修三的"算法初步"一章,开篇就讲辗转相除法(欧几里得算法)和更相减损术。教材通常会给出两种算法的程序框图:
更相减损术(流程图):
输入 a, b
当 a ≠ b:
如果 a > b: a = a - b
否则: b = b - a
输出 a(即为等数)
这个流程图的每一步,都可以对应到《九章算术》里"副置分母、子之数,以少减多,更相减损,求其等也"这段话。两千年前的古文,翻译成现代程序语言,一字不差。
数论基础
最大公约数(GCD)是数论中最基础的概念。虽然高考不直接考数论,但近年的数学竞赛和强基计划中,数论题的比例在增加。而更相减损术这个概念,是最容易入手的数论入门题——它不依赖任何高级知识,只靠加减法。
数学文化题
近几年的高考数学卷中,"数学文化"类题目越来越多。《九章算术》是高频考点,约分术、更相减损术都出现过。如果学生提前读过原典,做这类题简直是"送分"——因为原文已经看过,不需要现场理解古文。
思考与拓展
- 用更相减损法求 91 和 49 的最大公约数,你能用更少的步数完成吗?(提示:先做"可半者半之"——但 91 和 49 都不是偶数,这条路走不通)
- 试比较更相减损术和欧几里得算法,分别用两种方法求 ,哪个更快?
- 如果三个数 49、91、133 一起求最大公约数,更相减损术还能用吗?怎么扩展?
一句话总结
91 和 49 看似没有关系,但"更相减损"七步之后,它们的"等数"7 浮出水面——不是因为你"看出来"了,而是因为算法本身替你找到了它。