∫π每天一道数学题
← 返回孙子算经
孙子算经 · 第 39 讲 · 2026-10-25 · 约 12 分钟

盈不足术——一项西传的中国算法

盗库失绢,草中分绢:人得六匹盈六匹,人得七匹不足七匹。问人、绢各几何?答曰贼十三人,绢八十四匹。这道题用的「盈不足术」,是中算最伟大的输出之一——它把一个试错过程写成四则运算,九百年后经阿拉伯传遍欧洲,被称为「中国算术的平方」。

原典

今有人盗库绢,不知所失几何?但闻草中分绢,人得六匹,盈六匹;人得七匹,不足七匹。问人、绢各几何?

答曰:贼一十三人,绢八十四匹。

术曰:先置人得六匹于右上,盈六匹于右下,后置人得七匹于左上,不足七匹于左下,维乘之所得,并之为绢,并盈不足为人。

白话翻译

有人偷了库里的绢,不知道丢了多少。只听见贼人在草丛里分绢:如果每人分六匹,就多出六匹;如果每人分七匹,就差七匹。问贼有几人、绢有多少匹?

答案是:贼十三人,绢八十四匹。

术文给的算法是:把「人得六匹」放在右上,「盈六匹」放右下;「人得七匹」放左上,「不足七匹」放左下。交叉相乘,把所得加起来作为绢数;把盈与不足加起来作为人数。

这是中国古代最重要的算法之一。 它只靠两次假设(假设每人 6 匹、假设每人 7 匹),就把答案算了出来,全程不需要解方程。

示意图

盈不足术:两次假设、交叉相乘、并之为绢

图:(6×7+7×6)=84 匹为绢;(6+7)=13 人为人数;验算 13×6+6=84、13×7−7=84

古人的算法

先把题意翻成今天的方程。 设人数 nn、绢数 MM。

每人六匹,盈六匹——分完了还多六匹:

M=6n+6(1)M = 6n + 6 \qquad (1)

每人七匹,不足七匹——分了还差七匹:

M=7n−7(2)M = 7n - 7 \qquad (2)

两式相减:

(7n−7)−(6n+6)=0⟹n=13(7n - 7) - (6n + 6) = 0 \quad \Longrightarrow \quad n = 13

代回
(1):M=6×13+6=84M = 6 \times 13 + 6 = 84。

验算两式:84=6×13+6=8484 = 6 \times 13 + 6 = 84 ✓,84=7×13−7=8484 = 7 \times 13 - 7 = 84 ✓

术文怎么算? 它不解方程,而是「交叉相乘」:

术文说「维乘之所得,并之为绢」。四个位置摆好后,交叉相乘相加:

6×7+7×6=42+42=84 匹(绢)6 \times 7 + 7 \times 6 = 42 + 42 = 84\ \text{匹(绢)}

「并盈不足为人」:把盈六与不足七相加:

6+7=13 人6 + 7 = 13\ \text{人}

通用公式:设两次假设的每份为 a1a_1、a2a_2,对应的盈/不足为 b1b_1、b2b_2,则

人数=b1+b2a2−a1,总数=a1b2+a2b1a2−a1\text{人数} = \frac{b_1 + b_2}{a_2 - a_1}, \qquad \text{总数} = \frac{a_1 b_2 + a_2 b_1}{a_2 - a_1}

本题 a1=6a_1 = 6、a2=7a_2 = 7、b1=6b_1 = 6、b2=7b_2 = 7:

人数=6+77−6=13,绢=6×7+7×67−6=84\text{人数} = \frac{6+7}{7-6} = 13, \qquad \text{绢} = \frac{6 \times 7 + 7 \times 6}{7-6} = 84

为什么这样就对? 可以这样理解:两次假设相差的每人份数是 a2−a1=1a_2 - a_1 = 1,而这个差值同时「吃掉」了盈与不足之和 b1+b2=13b_1 + b_2 = 13(多出来的六匹 + 缺少的七匹)。所以人数就是 b1+b2a2−a1\dfrac{b_1+b_2}{a_2-a_1}。这个推理不需要代数,只用比例:一份差异对应一份盈缺之差。

现代数学视角

盈不足术的实质,是线性插值。

把「每人数」记为 xx,「需要的绢数」记为 f(x)=nxf(x) = nx。两次试算给出:

f(6)=6n=M−6,f(7)=7n=M+7f(6) = 6n = M - 6, \qquad f(7) = 7n = M + 7

由于 f(x)f(x) 是过原点的直线,两点定线。术文算出的 84 和 13,正是这条直线与「f(x)=f(x) = 实际存量」的交点。

今天这叫「弦截法」,是数值分析中求方程根的基本方法之一。当方程 f(x)=cf(x) = c 难以直接求解时,先猜两个值、看偏差、再用线性关系逼近真解——这正是盈不足的思想,也是牛顿迭代法的前身。

它是怎么西传的:《九章算术》的盈不足术经印度、阿拉伯数学家吸收。阿拉伯世界的「hisab al-khata'ayn」(双假设法)、《计算之书》都有记载。12 世纪传入欧洲,斐波那契《算盘书》专章介绍,称为「regula augmenti et diminuti」。欧洲中世纪数学家称它为「elchataym」——音译自阿拉伯语,而阿拉伯语的源头正是汉语「盈不足」经由波斯语的转写。一门算法,横跨三大洲,用了一千五百年。

它的普适性远超出分配题:凡是能通过两次试猜得到「偏多」「偏少」两类偏差的问题,都能套用盈不足框架。中算书里用它解面积、体积、价格、工程等问题,《九章算术》第七章整章都是盈不足。这是中国古代算法抽象能力的铁证。

高中课本关联

方程与消元:本题两式相减即得答案,是二元一次方程组最简单的形式。让学生比较「方程法」与「盈不足法」,理解同一问题的不同解法路径。

线性插值与函数:f(x)f(x) 是直线,两点确定一条直线。这对应高中数学「已知两点求一次函数」,也是导数里「以直代曲」的雏形。

近似算法:试值—看偏差—逼近,这是计算数学的基本范式。今天编程求 2\sqrt{2}、解非线性方程,都用这条思路。让学生体会:有些问题的解法不是公式,而是策略。

数学史与世界交流:一道中国古题如何经阿拉伯传到欧洲、影响中世纪商业计算——这是STEAM教育里难得的跨文化案例。可以让学生查「elchataym」与「盈不足」的词源关联。

思考与拓展

  1. 算一算:按术文摆四方阵:右上 6、右下盈 6、左上 7、左下不足 7。交叉相乘后「并之为绢」得 84,「并盈不足为人」得 13。再用方程法 M=6n+6=7n−7M = 6n + 6 = 7n - 7 验证。

  2. 改数据:若「人得五匹,盈四匹;人得八匹,不足十一匹」,用盈不足术求人与绢。(提示:人数 =4+118−5=5= \dfrac{4+11}{8-5} = 5,绢 =5×11+8×43=873=29= \dfrac{5 \times 11 + 8 \times 4}{3} = \dfrac{87}{3} = 29。)

  3. 两次都是盈:若「人得六匹盈六匹;人得八匹盈二匹」,公式该怎么改?与「一盈一不足」有什么不同?

  4. 非整数解:若「人得六匹盈五匹;人得七匹不足三匹」,人数是多少?会不会出现分数?这时答案怎么理解?

  5. 近似思维:用盈不足的思路估算 3\sqrt{3}:先猜 1.7(1.72=2.891.7^2 = 2.89,偏小 0.11),再猜 1.8(1.82=3.241.8^2 = 3.24,偏大 0.24),用线性插值估一个更准的值,并与真值比较。(提示:这正是牛顿法的雏形。)

一句话总结

右上六、右下盈六,左上七、左下不足七——四个数的交叉相乘,写下了一门从《九章算术》走向全世界的算法。

— Y. · 2026-10-25