盈不足术——一项西传的中国算法
盗库失绢,草中分绢:人得六匹盈六匹,人得七匹不足七匹。问人、绢各几何?答曰贼十三人,绢八十四匹。这道题用的「盈不足术」,是中算最伟大的输出之一——它把一个试错过程写成四则运算,九百年后经阿拉伯传遍欧洲,被称为「中国算术的平方」。
原典
今有人盗库绢,不知所失几何?但闻草中分绢,人得六匹,盈六匹;人得七匹,不足七匹。问人、绢各几何?
答曰:贼一十三人,绢八十四匹。
术曰:先置人得六匹于右上,盈六匹于右下,后置人得七匹于左上,不足七匹于左下,维乘之所得,并之为绢,并盈不足为人。
白话翻译
有人偷了库里的绢,不知道丢了多少。只听见贼人在草丛里分绢:如果每人分六匹,就多出六匹;如果每人分七匹,就差七匹。问贼有几人、绢有多少匹?
答案是:贼十三人,绢八十四匹。
术文给的算法是:把「人得六匹」放在右上,「盈六匹」放右下;「人得七匹」放左上,「不足七匹」放左下。交叉相乘,把所得加起来作为绢数;把盈与不足加起来作为人数。
这是中国古代最重要的算法之一。 它只靠两次假设(假设每人 6 匹、假设每人 7 匹),就把答案算了出来,全程不需要解方程。
示意图
古人的算法
先把题意翻成今天的方程。 设人数 、绢数 。
每人六匹,盈六匹——分完了还多六匹:
每人七匹,不足七匹——分了还差七匹:
两式相减:
代回
(1):。
验算两式: ✓, ✓
术文怎么算? 它不解方程,而是「交叉相乘」:
术文说「维乘之所得,并之为绢」。四个位置摆好后,交叉相乘相加:
「并盈不足为人」:把盈六与不足七相加:
通用公式:设两次假设的每份为 、,对应的盈/不足为 、,则
本题 、、、:
为什么这样就对? 可以这样理解:两次假设相差的每人份数是 ,而这个差值同时「吃掉」了盈与不足之和 (多出来的六匹 + 缺少的七匹)。所以人数就是 。这个推理不需要代数,只用比例:一份差异对应一份盈缺之差。
现代数学视角
盈不足术的实质,是线性插值。
把「每人数」记为 ,「需要的绢数」记为 。两次试算给出:
由于 是过原点的直线,两点定线。术文算出的 84 和 13,正是这条直线与「 实际存量」的交点。
今天这叫「弦截法」,是数值分析中求方程根的基本方法之一。当方程 难以直接求解时,先猜两个值、看偏差、再用线性关系逼近真解——这正是盈不足的思想,也是牛顿迭代法的前身。
它是怎么西传的:《九章算术》的盈不足术经印度、阿拉伯数学家吸收。阿拉伯世界的「hisab al-khata'ayn」(双假设法)、《计算之书》都有记载。12 世纪传入欧洲,斐波那契《算盘书》专章介绍,称为「regula augmenti et diminuti」。欧洲中世纪数学家称它为「elchataym」——音译自阿拉伯语,而阿拉伯语的源头正是汉语「盈不足」经由波斯语的转写。一门算法,横跨三大洲,用了一千五百年。
它的普适性远超出分配题:凡是能通过两次试猜得到「偏多」「偏少」两类偏差的问题,都能套用盈不足框架。中算书里用它解面积、体积、价格、工程等问题,《九章算术》第七章整章都是盈不足。这是中国古代算法抽象能力的铁证。
高中课本关联
方程与消元:本题两式相减即得答案,是二元一次方程组最简单的形式。让学生比较「方程法」与「盈不足法」,理解同一问题的不同解法路径。
线性插值与函数: 是直线,两点确定一条直线。这对应高中数学「已知两点求一次函数」,也是导数里「以直代曲」的雏形。
近似算法:试值—看偏差—逼近,这是计算数学的基本范式。今天编程求 、解非线性方程,都用这条思路。让学生体会:有些问题的解法不是公式,而是策略。
数学史与世界交流:一道中国古题如何经阿拉伯传到欧洲、影响中世纪商业计算——这是STEAM教育里难得的跨文化案例。可以让学生查「elchataym」与「盈不足」的词源关联。
思考与拓展
-
算一算:按术文摆四方阵:右上 6、右下盈 6、左上 7、左下不足 7。交叉相乘后「并之为绢」得 84,「并盈不足为人」得 13。再用方程法 验证。
-
改数据:若「人得五匹,盈四匹;人得八匹,不足十一匹」,用盈不足术求人与绢。(提示:人数 ,绢 。)
-
两次都是盈:若「人得六匹盈六匹;人得八匹盈二匹」,公式该怎么改?与「一盈一不足」有什么不同?
-
非整数解:若「人得六匹盈五匹;人得七匹不足三匹」,人数是多少?会不会出现分数?这时答案怎么理解?
-
近似思维:用盈不足的思路估算 :先猜 1.7(,偏小 0.11),再猜 1.8(,偏大 0.24),用线性插值估一个更准的值,并与真值比较。(提示:这正是牛顿法的雏形。)
一句话总结
右上六、右下盈六,左上七、左下不足七——四个数的交叉相乘,写下了一门从《九章算术》走向全世界的算法。