∫π每天一道数学题
← 返回孙子算经
孙子算经 · 第 63 讲 · 2026-09-26 · 约 8 分钟

卷下·第28题:百鹿入城——盈不足术的经典应用

一百只鹿进城,每家取一鹿取不完,三家共一鹿恰好分完。古人不用方程,用盈不足术两步假设锁定答案七十五家。

原文

今有百鹿入城,家取一鹿,不尽,又三家共一鹿,适尽。问:城中家几何?

答曰:七十五家。

术曰:以盈不足取之,假令七十二家鹿不尽四,令之九十家鹿不足二十。置七十二于右上,盈四于右下,置九十于左上,不足二十于左下,维乘之所得并为实,并盈不足为法,除之,即得。

白话翻译

现在有一百只鹿运进城里,如果每家分一只鹿,分不完(还有剩余);再让三家合分一只鹿,恰好分完。问:城里一共有多少家?

答案是七十五家。

古人的算法是这样的:用盈不足术来解。先假设城里有七十二家,这样鹿会多出四只(盈四);再假设城里有九十家,这样鹿会少二十只(不足二十)。把七十二放在右上角,盈四放在右下角;把九十放在左上角,不足二十放在左下角。交叉相乘(维乘),把乘积相加作为"实",把盈和不足相加作为"法",用实除以法,就得到答案。

示意图

盈不足术交叉相乘示意图:右上72、右下盈4、左上90、左下不足20,交叉相乘得实1800,并盈不足得法24,相除得75家

图:盈不足术的"维乘"布局——右上72与左下20交叉相乘,左上90与右下4交叉相乘,相加得实1800,法24,相除得75家

数学解读

一、现代解法:列一元一次方程

设城中有 xx 家。每家先取一只鹿,共取走 xx 只;剩下的鹿按"三家共一鹿"分配,即每家再取 13\dfrac{1}{3} 只,共取走 x3\dfrac{x}{3} 只。两次取完恰好分完一百只鹿,于是:

x+x3=100x + \frac{x}{3} = 100

合并得:

4x3=100\frac{4x}{3} = 100

解得:

x=75x = 75

城中有七十五家。验证:七十五家每家取一只,取走七十五只,余二十五只;三家共一鹿,七十五家需二十五只,恰好分完。与题意完全吻合。

二、古术逐句解释

「以盈不足取之」——明确方法:用盈不足术求解。盈不足术的核心思想是:先做两次假设,一次偏多(盈),一次偏少(不足),再通过交叉相乘加权平均,锁定真实值。

「假令七十二家鹿不尽四」——第一次假设:假设有七十二家。每家取一只,取走七十二只,余二十八只;三家共一鹿,七十二家需 72÷3=2472 \div 3 = 24 只。二十八只比二十四只多出四只,所以"鹿不尽四",即盈四。

「令之九十家鹿不足二十」——第二次假设:假设有九十家。每家取一只,取走九十只,余十只;三家共一鹿,九十家需 90÷3=3090 \div 3 = 30 只。十只比三十只少二十只,所以"鹿不足二十",即不足二十。

「置七十二于右上,盈四于右下,置九十于左上,不足二十于左下」——这是算筹的摆放位置。四个数摆成一个方阵:

9072204\begin{array}{cc} 90 & 72 \\ 20 & 4 \end{array}

左上九十、右上七十二、左下不足二十、右下盈四。

「维乘之所得并为实」——"维乘"即交叉相乘。右上乘左下:72×20=144072 \times 20 = 1440;左上乘右下:90×4=36090 \times 4 = 360。相加得实:1440+360=18001440 + 360 = 1800。

「并盈不足为法」——把盈和不足相加:4+20=244 + 20 = 24,作为法(除数)。

「除之,即得」——实除以法:1800÷24=751800 \div 24 = 75。城中有七十五家。

三、古今对照验证

步骤古术现代计算
假设一七十二家,盈四72+72/3=9672 + 72/3 = 96,100−96=4100 - 96 = 4
假设二九十家,不足二十90+90/3=12090 + 90/3 = 120,120−100=20120 - 100 = 20
维乘72×20+90×472 \times 20 + 90 \times 41440+360=18001440 + 360 = 1800
并盈不足4+204 + 202424
相除1800÷241800 \div 247575

古术答案七十五家,与现代方程解完全一致。

四、盈不足术的本质:线性插值

盈不足术的公式可以写成一般形式。设两次假设为 a1,a2a_1, a_2,对应误差为 b1b_1(盈)、b2b_2(不足),则:

x=a1b2+a2b1b1+b2x = \frac{a_1 b_2 + a_2 b_1}{b_1 + b_2}

这其实就是线性插值(linear interpolation),也叫假位法(false position)。其原理是:假设真实值与误差成线性关系,用两个已知点确定一条直线,再求零点。

代入本题:a1=72,b1=4,a2=90,b2=20a_1 = 72, b_1 = 4, a_2 = 90, b_2 = 20:

x=72×20+90×44+20=180024=75x = \frac{72 \times 20 + 90 \times 4}{4 + 20} = \frac{1800}{24} = 75

五、背景与中西比较

盈不足术在《九章算术》第七章已有系统论述,《孙子算经》此题是其典型应用。这种方法在西方被称为"假位法",古埃及纸草书(约公元前1650年)中已有类似算法,古希腊也有使用。但中国的盈不足术更为成熟和系统化,且能处理"两盈""两不足""盈不足"等多种情形,比西方同类方法早数百年。

值得注意的是,本题古人没有列方程,而是通过两次假设加交叉相乘直接得到答案。这体现了中国古代数学"以算为主"的特点:不追求符号化的代数表达,而是通过固定的算法程序(术)解决问题。这种算法化思想,与现代计算机的"程序化求解"有异曲同工之妙。

高中课本关联

1. 一元一次方程(初中):本题可直接列方程 x+x3=100x + \dfrac{x}{3} = 100 求解,是方程思想的经典应用。

2. 算法初步(高中必修):盈不足术是一种完整的算法——输入两个假设值,经过固定的计算步骤(交叉相乘、相加、相除),输出答案。这与现代算法的"输入—处理—输出"结构完全一致。高考中程序框图题常考此类算法思想。

3. 线性插值与函数思想:盈不足术的本质是用一次函数近似求解。在高中数学中,二分法求方程近似解(必修一)与盈不足术思想相通:都是通过不断缩小区间来逼近真实值。

4. 数学文化:高考数学文化题常涉及《九章算术》《孙子算经》等经典,理解盈不足术的原理有助于应对此类题目。

思考与拓展

练习一:若题目改为"今有百鹿入城,家取一鹿,不尽,又四家共一鹿,适尽。问:城中家几何?"请用现代方程和盈不足术两种方法求解。

提示:设 xx 家,则 x+x4=100x + \dfrac{x}{4} = 100,解得 x=80x = 80。用盈不足术可假设七十二家和九十家,计算盈与不足,再交叉相乘验证。

练习二:盈不足术的公式 x=a1b2+a2b1b1+b2x = \dfrac{a_1 b_2 + a_2 b_1}{b_1 + b_2} 与今天的线性插值公式有何联系?请从函数图像的角度解释:为什么两个假设点的误差可以"加权平均"得到真实值?

提示:把误差看作假设值的函数 f(a)=假设a家时鹿的盈亏f(a) = \text{假设}a\text{家时鹿的盈亏},则 f(a1)=b1f(a_1) = b_1(盈),f(a2)=−b2f(a_2) = -b_2(不足)。假设 ff 是线性函数,求 f(x)=0f(x) = 0 的点,即为所求。

练习三:已知盈不足术的两次假设为七十二家(盈四)和九十家(不足二十),能否反推出总鹿数?如果总鹿数不是百鹿,而是其他数值,盈不足术的答案会如何变化?

提示:设总鹿数为 NN。七十二家时,72+24=9672 + 24 = 96,盈 N−96=4N - 96 = 4,得 N=100N = 100。九十家时,90+30=12090 + 30 = 120,不足 120−N=20120 - N = 20,得 N=100N = 100。两个假设相互印证,总鹿数确为一百。

一句话总结

百鹿入城问题用盈不足术两步假设、交叉相乘,不列方程便锁定七十五家——这是中国古代算法化数学的典范,其本质与现代线性插值一脉相承。

— Y. · 2026-09-26