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

有积求方——中国古代开方的第一课

今有积二十三万四千五百六十七步,问为方几何?答曰四百八十四步九百六十八分步之三百一十一。这道题开启了中国古代最重要的算法之一——开方。术文里「借一算为下法,步之超一位至百而止」十四个字,写的是最古老的试商定位法;而答案末尾那个九百六十八分之三百一十一,是古人处理「开不尽」的方式。

原典

今有积,二十三万四千五百六十七步。问:为方几何?

答曰:四百八十四步九百六十八分步之三百一十一。

术曰:置积二十三万四千五百六十七步,为实,次借一算为下法,步之超一位至百而止。上商置四百于实之上,副置四万于实之下。下法之上,名为方法,命上商四百除实,除讫,倍方法,方法一退,下法再退,复置上商八十以次前商,副置八百于方法之下。下法之上,名为廉法,方廉各命上商八十以除实,除讫,倍廉法,上与方法俱再退。下法之上,复置上商四,副置四于方法之下。下法之上,名曰隅法,方廉隅各命上商四以除实,除讫。其逅有不尽者,以法命之。

白话翻译

有一块正方形田地,面积是二十三万四千五百六十七平方步。问它的边长是多少?

答案是:四百八十四步,再加九百六十八分之三百一十一步。

术文给的算法是:把面积作为「实」(被开方数),借一枚算筹作为「下法」,让它每超一位就退一级,退到「百」位为止。然后上商「四百」——在实的上方写四百,在实的下方写四万(四倍的百位)。此时下法上方那枚算筹叫「方法」,用它配上商四百去减实。减完,把方法翻倍,方法退一位、下法退两位;再上商「八十」,在方法下方写八百,此时下法上方叫「廉法」;方法与廉法各配八十去减实,减完,廉法翻倍,方法与廉法再退。最后下法上方上商「四」,方法下方写四,此时下法上方叫「隅法」;方、廉、隅三法各配四去减实。减完,如果还有剩余,就用法把它表示成一个分数。

这段话极难读,因为它描述的是筹算的算筹摆放,而不是纸笔算式。 但它的数学内核非常清晰,而且我们今天还在用。

示意图

开方术中实、方法、廉法、隅法的摆法

图:三层试商——百位 400、十位 80、个位 4,每一步配一个专门的「法」去减实

古人的算法

先看结果对不对。

4842=234256484^2 = 234256

而实是 234567,差

234567−234256=311234567 - 234256 = 311

所以边长比 484 多出一小块,答案写成 484311968484\dfrac{311}{968}。

为什么不写成 484.3484.3? 因为古人不会用小数,他们用分数。而分母 968 不是随手取的,它有明确来历:

968=2×484968 = 2 \times 484

即边长近似值的二倍。这正是线性近似:若边长增加 Δ\Delta,面积增加约 2a⋅Δ2a \cdot \Delta,所以

Δ≈余数2a=3112×484=311968\Delta \approx \frac{\text{余数}}{2a} = \frac{311}{2 \times 484} = \frac{311}{968}

古人在没有微分学的时代,用「倍方法」这一步,准确抓住了面积变化的线性主项。 这就是术文为什么要「倍方法」——翻倍后的方法,正是 2a2a。

用今天的知识看,这个近似之所以好用,是因为当余数(311)远小于 a2a^2(234256)时,二次项 Δ2\Delta^2 可以忽略。实际验算:

(484+311968)2=4842+2×484×311968+(311968)2=234256+311+0.103≈234567.1\left(484 + \frac{311}{968}\right)^2 = 484^2 + 2 \times 484 \times \frac{311}{968} + \left(\frac{311}{968}\right)^2 = 234256 + 311 + 0.103 \approx 234567.1

误差只有 0.1,相对误差不到十万分之一。

现代数学视角

什么是开方:给定面积 AA,求边长 aa 使 a2=Aa^2 = A。今天写成 a=Aa = \sqrt{A}。本题 234567≈484.32\sqrt{234567} \approx 484.32,与古法 484+311968≈484.32484 + \dfrac{311}{968} \approx 484.32 一致。

术文的「三层试商」:把待求数按位拆分,先定百位、再定十位、最后是个位,每一步都用面积减去已确定部分的贡献。这正是今天手算开平方的逐位试商法,也是计算机二分法、牛顿法求平方根之前,人类用了一千五百年的标准算法。

「借一算为下法,步之超一位至百而止」:这一步是定位。被开方数是六位数,它的平方根应是三位数——古人用一根算筹从个位起,每跨过两位退一级,退到百位,就知道最高位是百位。这个定位技巧避免了盲目试商。《九章算术·少广》chapter 专门讲开方,本题是它的标准范例。

误差分析的雏形:答案末尾的 311968\dfrac{311}{968} 说明古人刻意保留了「开不尽」的部分,而不是取整了事。他们甚至通过「倍方法」得到了正确的误差阶——这不是偶然,是长期算学实践总结出来的经验法则。可以说,这是中国古代对「近似计算精度」最早的自觉处理之一。

高中课本关联

平方根与算术平方根:A\sqrt{A} 的定义与近似计算。本题展示了如何手算到任意精度——把分数分母继续放大,就能得到更准的结果。

函数与迭代:f(x)=x2f(x) = x^2 的反函数。已知函数值求自变量,是反函数思想的朴素体现。今天学生学「已知 f(x)=x2f(x) = x^2,f(a)=234567f(a) = 234567,求 aa」,与本题是同一件事。

线性近似与微分:Δf≈f′(a)Δ\Delta f \approx f'(a)\Delta。本题的「倍方法」就是 f′(a)=2af'(a) = 2a。把这条线索从《九章算术》讲到导数,「以直代曲」的思想脉络就完整了。

估计与验算:4842=234256484^2 = 234256、4852=235225485^2 = 235225,所以答案在 484 与 485 之间。这种「夹逼」思路今天依然常用——估根号、估增长率、估误差范围。

思考与拓展

  1. 算一算:验算 4842=234256484^2 = 234256,并算余数 234567−234256=311234567 - 234256 = 311。再用 3112×484\dfrac{311}{2 \times 484} 复现答案的分母 968。

  2. 夹逼:只用 4842484^2 与 4852485^2 两个数,说明 234567\sqrt{234567} 落在 484 与 485 之间。它离哪一端更近?

  3. 提高精度:古人只取了一次线性近似。若再做一次(用 (a+311968)2\left(a + \dfrac{311}{968}\right)^2 修正),误差能降到多少?这近似牛顿迭代法。

  4. 定位练习:若积是 23 456 700(大十倍),边长约多少?若积是 2345.67(小百倍),边长约多少?总结「面积每变 100 倍,边长变几倍」。

  5. 反向出题:自己编一道「有积求方」:取一个三位数如 517,平方得 267289,把 267289 作为积,请同学用夹逼法估算边长,再用线性近似给出分数形式的精确值。

一句话总结

把一根算筹从个位退到百位,再试商四百、八十、四——两千年前的分层试商,与今天手算平方根用的是同一套算法。

— Y. · 2026-10-15