∫π每天一道数学题
← 返回九章算术专题
九章算术 · 第 14 讲 · 2026-08-31 · 约 8 分钟

约分术:更相减损——老祖宗的辗转相除法

方田章第十四题——把十二分之十八约成最简分数。今人学了约分就忘,古人却把它当成一个专门的「术」来研究。更相减损术里藏着欧几里得算法的核心思想,两千年前的中国古人已经掌握了求最大公约数最朴素的方法,比西方早了不止一个时代。

原文

今有十八分之十二。问约之得几何?

答曰:三分之二。

约分术曰:可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。

白话翻译

现在有分数 1218\frac{12}{18},问约分后是多少?

答案:23\frac{2}{3}

计算方法(约分术):如果分子分母都可以被 2 整除,就先除以 2。如果不行,就把分子和分母分别放在两边,用大的减去小的,反复相减,直到两边相等。这个相等的数就是"等数"(最大公约数)。用这个等数来约分。

示意图

更相减损术示意图

12 和 18 的更相减损过程:从 18 减 12 开始,反复减去较小的数,直到两数相等。每一步都是在缩小差距,最终找到最大公约数 6。

数学解读

1. 这道题到底在说什么?

1218\frac{12}{18} 约分,太简单了,一个小学生都会。分子分母同时除以 6,得到 23\frac{2}{3}

但《九章》的解法不是"找最大公约数",而是一步一步减:

1812=618 - 12 = 6 126=612 - 6 = 6 6=6——等数找到了!6 = 6 \quad \text{——等数找到了!}

然后 1218=12÷618÷6=23\frac{12}{18} = \frac{12 \div 6}{18 \div 6} = \frac{2}{3}

今人看到这一步可能会觉得"多此一举",但这里面藏着中国古代数学的一个核心思想——用操作代替定义

2. 更相减损术就是欧几里得算法

欧几里得算法(辗转相除法)是这么写的:

gcd(18,12)=gcd(12,6)=gcd(6,0)=6\gcd(18, 12) = \gcd(12, 6) = \gcd(6, 0) = 6

用除法:18÷12=1618 \div 12 = 1 \cdots 612÷6=2012 \div 6 = 2 \cdots 0,所以最大公约数是 6。

更相减损术是这么写的:

18126,1266,6=618 \xrightarrow{-12} 6,\quad 12 \xrightarrow{-6} 6,\quad 6 = 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. 从"约分"到"分数基本性质"

分数约分的本质,是分数的基本性质:

ab=a÷db÷d,d0\frac{a}{b} = \frac{a \div d}{b \div d}, \quad d \neq 0

分子分母同时除以同一个非零数,分数值不变。

这个性质在《九章算术》里没有明确写出来——古人不说"性质",只说"术"(怎么做)。但两千年的数学教育告诉我们,知道"为什么不能约分"比"会约分"更重要。

高中课本关联

数论入门

最大公约数(GCD)是数论的基础概念。虽然高中数学不专门讲数论,但多项式的最大公因式、整式的约分,思维逻辑和这里一模一样。

x21x2+2x+1=(x1)(x+1)(x+1)2=x1x+1\frac{x^2 - 1}{x^2 + 2x + 1} = \frac{(x - 1)(x + 1)}{(x + 1)^2} = \frac{x - 1}{x + 1}

1218=23\frac{12}{18} = \frac{2}{3} 完全是同一套思路——找公因式,再约掉。

编程中的欧几里得算法

如果学生学了编程,第一个算法题往往就是"求两个数的最大公约数"——老师会教递归写法:

gcd(a,b)=gcd(b,amodb)\gcd(a, b) = \gcd(b, a \bmod b)

这个递归的每一步,都在重复《九章算术》里"更相减损"的逻辑。两千年前写在竹简上的算法,今天写在每一本计算机教材里。

数学归纳法的萌芽

"更相减损"的过程,其实是一个归纳过程

  • 如果 a=ba = b,等数就是 aa
  • 如果 a>ba > b,问题转化为求 aba - bbb 的最大公约数
  • 每次转化都让数字变小,有限步终止

这不是数学归纳法本身,但它已经隐含了"递归"和"有限步终止"的思想。高三学生学数学归纳法的时候,知道更相减损术这个例子,会更容易理解"为什么归纳法有效"。

思考与拓展

  1. 用更相减损法求 91 和 49 的最大公约数(试试看,和第 15 题答案对不对得上)
  2. 更相减损法和辗转相除法,哪个效率更高?如果数字很大(比如 100000 和 1),用减法要减多少步?
  3. 三数求公约数:"可半者半之"的逻辑能不能推广到三个数?比如 12、18、24 的最大公约数?

一句话总结

约分术不是"约分"本身,而是"找最大公约数"的方法——更相减损,用减法代替除法,两千年前的古人和今天的计算机用着同一个算法。

— Y. · 2026-08-31