《九章算术·少广》:从分数运算到开方术的古代算法全解析
发布时间:2026/10/14 17:35:51 锦皓数字建站

如果你翻到《九章算术》第四卷《少广》会发现这一卷和前面几卷的画风明显不一样。《方田》还在讲田亩面积、分数约分《粟米》还在讲比例交换到了《少广》突然就开始上开平方、开立方而且把分数四则运算全部用上一点不讲情面。简单说《少广》的核心任务只有三件事已知矩形面积和一条用一堆单位分数表示的宽求另一条边已知正方形面积求边长已知立方体体积求棱长。翻译成今天的数学语言就是分数加法、开平方、开立方。这一卷适合三类人读研究数学史和古代算法的朋友、想搞明白手工开方到底怎么回事的学习者以及做数值计算、想从古老算法里找思想源头的程序员。它不像现代教材那样给你一堆公式而是给你一套可以一步步执行的“算法流程”这也是它最值钱的地方。1. 先搞清楚《少广》究竟在算什么1.1 卷名里的线索从“少”处求“广”“少广”这两个字历来的解释很多但核心意思是一致的这里的“广”指矩形的一条边也就是宽“从”读作zòng指另一条边也就是长。已知面积和宽求长这个过程古人叫“少广”。为什么叫“少”因为题目里给出宽的时候很少给一个整步数而是给“一步、二分之一步、三分之一步、四分之一步”这种递减的单位分数。“少”就是在这些不足一步的零碎尺度上做文章。换句话说整卷的名字就直接点明了它的研究对象在已知的那条边上全是零碎的分数需要你先把这些分数合并成一个数再去求另一条边。我最初读这卷的时候觉得“少广”两个字挺玄后来把题一做才发现它本质上就是一道分数应用题。古人把这种应用题单独列成一卷说明在汉代甚至更早的时候分数运算已经达到了相当系统化的程度不是偶尔碰上了算一下而是成体系地训练。1.2 一卷装了三种核心算法《少广》全卷共24个问题数量不多但内容密度很高大致可以归成三类。第一类是“少广术”专门处理已知面积为矩形、宽由若干个单位分数相加而成、求长的题目。这一块的主角是通分和除法。第二类是“开方术”也就是开平方。它不是给公式而是给出了一套完整的竖式运算流程古人管其中的关键步骤叫“借一算”“超一等”“议所得”“定法”“除实”。第三类是“开立方术”思路和开平方一脉相承但要把二项式展开从平方版本升级到立方版本。除了这三类《少广》后面还混着一些“圆田求径”之类的应用题。这些题表面上在算圆实际上还是在用开方法。所以读这一卷最重要的是抓住主线分数运算打底开方运算为核心其余全是应用。1.3 它在《九章算术》里的特殊位置《九章算术》一共九卷246个问题绝大多数按应用场景分类田亩、粮食交换、赋税、工程、贸易、勾股测量。《少广》是少有的、直接以“计算方法本身”为组织线索的卷。这说明什么问题说明中国古代数学并不是只记答案它对“算法”有明确的追求。每个问题都分成“今有”已知条件、“答曰”答案、“术曰”计算方法三段其中“术曰”才是灵魂。在《少广》之前《方田》卷已经讲了分数的约分和四则运算到了《少广》这些分数知识被整体调用用来解决更复杂的问题。更关键的是开方术一旦建立起来后面的《勾股》卷、各种体积计算就都有了工具。可以这么说《少广》是全书从“算术”走向“代数”的关键转折点读不懂它后面很多卷的推导根基就不牢。2. 少广术两千年前的分数通分现场2.1 少广题到底长什么样我按原文风格仿一道题今有田广一步、二分之一步、三分之一步、四分之一步求田一亩问从几何解释一下这块田的宽不是整整一步而是“1步 1/2步 1/3步 1/4步”加在一起。一亩田的面积在当时是240平方步这是汉代亩制的通行规定。现在已知面积和宽要求长。如果你直接用现代算式那就是长 240 ÷ (1 1/2 1/3 1/4)。答案很好算1 1/2 1/3 1/4 25/12所以长 240 × 12/25 2880/25 115.2步也就是115又1/5步。但古人不是这么直接写的。他们要考虑的是这么多个分数加在一起怎么统一分母于是就有了“齐同术”和“以最下分母遍乘”的操作。2.2 齐同术把分数“对齐”才能相加所谓“齐同”用现在的话说就是通分。“齐”是指把分子调整到与分母相称“同”是指让所有分数共享同一个分母。少广术的具体做法是找到所有分数分母的最小公倍数作为公分母然后把每一个分数都化为以这个公分母为分母的形式再相加。在我举的例子里分母分别是1、2、3、4最小公倍数是12。于是1 12/121/2 6/121/3 4/121/4 3/12。全部加起来是25/12。这一步的关键是找最小公分母而不是机械地把所有分母乘起来。如果我一开始图省事用1×2×3×424做公分母也能算但数字会变大通分过程更繁琐。古人反复强调“以最下分母遍乘诸分子”其实就是在提示你先看最小的那个可行分母从它入手。我实际动手做这类题的时候发现一个很实用的习惯先把所有分数按分母从大到小排列然后逐个检查每次只“吞并”一个新分母避免一口气把所有分数全扔进一个大通分算式里。这个方法在分母数量多的时候特别省事也不容易抄错。2.3 算例完整走一遍回到题目。宽是25/12步面积是240平方步那么长就是240 ÷ (25/12) 240 × 12/25。240 × 12 28802880 ÷ 25 115.2。115.2怎么用分数表达0.2就是1/5所以答案是115又1/5步。按古人的写法就是“一百一十五步、五分步之一”。如果你自己拿计算器验证115.2 × 2.0833……确实等于240没问题。这类题要多做几道才能体会到它的意义。表面上看是分数除法实际上它训练的是“把一个复杂条件拆成单位分数再做逆向运算”的能力。这种能力在后面的开方题里还会反复用到。3. 开方术手工开平方的完整算法还原3.1 先认识几个关键术语《少广》开方术的原文非常精炼每个字都是操作指令。我建议先记住这几个词的对应关系再去看原文就不会懵。术语含义现代对应实被开方数也就是已知的面积被开方数借一算在被开方数下放一根算筹标记位数起点分节定位超一等从个位起隔一位移动算筹每两位一节议所得试商估计当前位数上的根求当前位数字定法已确定根的两倍用于继续试商20a除实从“实”中减去试商对应的量做减法加隅在定法上加上试商本身再乘试商加上b后再乘b这里最核心的公式其实只有一个如果已经求出了根的前几位a现在要试下一位b那么需要减去的量是(20a b) × b。这个公式的几何意义是你已经有了一个边长为a的正方形现在要在两条边上各补一个宽为b的长条再在角上补一个b×b的小正方形总共补上的面积就是2ab b² (2a b)b。3.2 用55225走一遍完整竖式空讲术语没意思我拿55225来开方因为它的平方根是整数235方便验证。第一步分节。从个位开始每两位一节55225分成5 | 52 | 25。分节的原理是两位数的平方最多是三位数三位数的平方最多是五位数所以每两位决定根的一位。第二步看第一节5。2² 4小于5且最接近所以首商是2。用4减5余1。第三步把下一节52拉下来得到152。现在定法是2 × 2 × 10 40。试商152 ÷ 40大约3.8取3。验证(40 3) × 3 43 × 3 129。152 - 129 23。第四步再把下一节25拉下来得到2325。此时根的前两位是23定法是2 × 23 × 10 460。试商2325 ÷ 460大约5.05取5。验证(460 5) × 5 465 × 5 2325刚好减完。所以根是235。验算一下235² 55225完全正确。我建议你至少亲手算一遍不要只看表格。真正拿纸笔走流程的时候最容易出错的是第三步和第四步的“定法”计算定法不是简单的“根×2”而是“根×2×10”因为下一位是在十位或个位上进行运算数量级差10倍。这个细节现代竖式开方里叫“20a”古人叫“超一等”名字不同本质完全一样。3.3 遇到开不尽的数微数逼近如果被开方数不是完全平方数怎么办《少广》开方术的原文说得很清楚如果开不尽就用“以面命之”的近似方式而魏晋时期的注家刘徽在这个基础上又补了一段极重要的说明——求微数。意思是开方有余数时不要停下来继续退位求小数第一次退位用10作分母第二次退位用100作分母第三次用1000以此类推。我用√2来演示。分节写成2 | 00 | 00 | 00……因为小数部分每两位一节。第一步第一节是21² 1余1。首商1。 第二步拉下00得100。定法是2 × 1 × 10 20。试商4(20 4) × 4 96。100 - 96 4。现在根是1.4。 第三步拉下00得400。定法是2 × 14 × 10 280。试商1(280 1) × 1 281。400 - 281 119。根是1.41。 第四步拉下00得11900。定法是2 × 141 × 10 2820。试商4(2820 4) × 4 11296。11900 - 11296 604。根是1.414。再往下还能继续算第五步会得到第四位小数是2所以√2 ≈ 1.4142。这个过程就是“微数”的实质——用一串十进分数无限逼近一个无理数。用今天的语言说它给出了无理数的十进制近似表示方案。考虑到这篇注文的年代这种思想是非常超前的。4. 开立方术与圆径问题4.1 开立方从二维走向三维开平方的几何背景是正方形面积开立方的几何背景是立方体体积。已知体积求棱长这就是开立方。公式上开平方用的恒等式是(a b)² a² 2ab b²开立方则要用(a b)³ a³ 3a²b 3ab² b³。我拿13824来开立方因为它是24³。第一步分节。立方根一位对应被开方数三位所以从个位起每三位一节13824分成13 | 824。 第二步看第一节13。2³ 8小于13且最接近首商是2。13 - 8 5余5。 第三步拉下下一节824得到5824。现在要试个位上的b。定法是3 × 20² 1200。试商4需要减去的总量是3 × 20² × 4 3 × 20 × 4² 4³ 1200 × 4 60 × 16 64 4800 960 64 5824。刚好减完。所以24³ 13824答案是24。开立方比开平方复杂的地方在于试商时不只是加一个“b²”还要加“3ab²”和“b³”整个附加项是一个关于b的三项式。我第一次按原文走的时候漏掉了中间的3ab²项结果怎么算都不对。后来才意识到古人把这一大项称作“以定法除实”不是只除一个定法就完事而是要把整个三项式都减干净。4.2 圆田求径开方术的应用题《少广》里有一类题表面上是圆实际上还是要开方。最典型的是“圆田求径”已知圆形田地的面积求直径。这里有一个必须注意的历史前提汉代通行“周三径一”也就是圆周率取3。按这个近似圆面积公式是S 3d²/4反推过去就是d² 4S/3。于是问题就变成了算出一个数再开平方。举个例子。假设一块圆形田的面积是19200平方步按π 3计算那么d² 4 × 19200 ÷ 3 25600开方得d 160步。如果你今天拿π 3.14去算结果就完全不同约等于156.4步。这不是古人算错了而是他们当时用的圆率标准不同。我觉得这个例子特别能说明一个问题读古代数学文献不能拿今天的常数去硬套。你只有先接受当时的前提条件才能真正理解算法的结构。后面我在“常见问题”里还会专门说这个。4.3 为什么古人能在没有计算器的条件下算大数很多人好奇古人用算筹做大数开方是不是特别痛苦我实际按算筹的位值制推演过发现并没有想象中那么恐怖。原因在于这套算法是“逐位逼近”的先确定根的位数再一位一位地求。每一位上只需要做一次试商和若干次乘法、减法计算量是线性的而不是把整个大数一次性卷进来。说白了这就是一个节省脑力的分治策略。现代人做数值计算时用的逐位逼近思路和它同源。这也是《少广》开方法最让我佩服的地方两千多年前的人已经懂得把一个大问题拆成若干个可以重复的小步骤来处理。5. 从《少广》到代数学后世如何接棒5.1 增乘开方法与高次方程《少广》确立的开方流程在宋元时期被进一步推广成“增乘开方法”。这个方法不再局限于平方根和立方根而是可以求任意高次方程的数值解。它的核心技巧是先估计一根的大致范围确定首商然后反复用商去乘各项系数并逐层减掉最终把方程降阶继续求下一位。这个思路的源头就是《少广》里“开方术”的分节、试商、定法、除实流程。区别只在于开平方是对二项式x² - N 0做数值解增乘开方法是对一般的多项式方程f(x) 0做数值解。从二项式到多项式这一步跨越非常关键。它把开方从“几何求边”变成了“代数求根”。我经常想如果只读现代教材里“牛顿迭代法求根”那一节你会觉得这是个很现代的算法。但如果你回头看看《少广》的流程会发现逐位确定根、每步用定法修正、再继续除下去这套模式早就存在了。算法思想的传承往往比我们想象的更连续。5.2 微数思想与极限观念刘徽注里那段“微数”的话是《少广》全卷思想浓度最高的地方。它说开方如果不能得到整数结果就继续退位求小数一次退位以十分母再次退位以百为母无穷退下去就能“以尽其理”。用现代语言翻译开不尽时可以用十进小数无限逼近真实值。这在当时是非常难得的极限观念。要知道十进制小数的系统使用在欧洲是很多个世纪之后才普及的。刘徽没有明确构造出“实数系”或者“极限”这样的概念但他已经意识到数不只有整数和分数还有一种开方开不尽、只能不断逼近的量。这种直觉正是后来实数理论的重要来源。我喜欢把这个细节讲给学编程的朋友听你写一个浮点数运算程序本质上也是在用有限位小数去逼近某个可能无限不循环的值。古人没有浮点数但有“微数”。概念工具换了底层逻辑没变。5.3 《少广》对现代算法思维的启发我自己做程序时最大的感触是《少广》提供了一部绝佳的“可读源码”。现代竖式开方你看了可能觉得只是计算技巧但当你把“分节”“超一等”“议所得”“定法”“除实”这些词当作函数步骤看待它立刻就变成了一篇逻辑清晰的伪代码。分节是确定解的位数等价于先估计数量级议所得是当前位的试商等价于对当前余数做一次快速除法定法和除实是精确修正等价于消去当前位对剩余部分的影响。整个过程循环执行直到余数为零或达到指定精度。这种把算法拆成“数量级估计 逐位修正 循环迭代”的思路放到今天依然很有教学价值。所以如果你想给初学者讲循环和迭代直接用开方术作为案例比空讲for循环生动得多。6. 读《少广》最容易踩的坑6.1 把少广术当成普通分数复习课最常见的误区是看到分数通分就觉得这是小学内容直接跳过。实际上少广术的价值恰恰在于它把“单位分数累加”这种特殊结构和除法结合起来形成了一种固定的“已知宽求从”的解题流程。如果跳过后面开方题里频繁出现的分数运算和带余除法你会连接不上。我建议至少做三道少广题而且要刻意不用现代公式而是按“先通分、再相除、最后化为带分数”的顺序做。这样能帮你建立和古人一致的数感再看后面的开方术会顺畅得多。6.2 分节位置判定错开平方是“每两位一节”开立方是“每三位一节”这是从个位开始往左数的。很多人手算时习惯从最高位开始分节导致节的边界和标准算法不一致。实际上分节的目的是确定根有多少位以及后续每次试商落在什么数量级上。从个位开始分才能让最后一位小数落在正确的节里。我见过不少初学者就是在这里栽跟头算到后面发现商的大小差了十倍。6.3 试商时漏掉“加隅”项开平方试商时很多人以为只要用“定法”去乘试商结果就行了结果把b²漏掉。比如求55225的平方根第二步试商3时正确的减除量是(40 3) × 3 129而不是40 × 3 120。如果你少算了9最后余数就会差9导致下一步错乱。开立方更麻烦漏掉3ab²或b³基本就算不下去。古人专门给“加隅”这一步起了名字就是为了提醒你别漏。我实际操作时习惯在每一步都把三项、四项完整列出来开平方(20a b) × b开立方3a²b 3ab² b³写清楚再减就不容易错。6.4 用现代圆周率验证圆田题前面提过圆田求径题用的圆周率是当时的近似值通常是3。如果你用3.14去验算答案对不上就以为是算法错了。我在初读时就被这个坑绊过。后来养成一个习惯凡是古代数学题先看它题设里隐含的常数再决定用哪个标准验证。这不是纵容错误而是尊重文献的前提假设。另外读《少广》最好选一个带校勘和注释的整理本。不同版本在个别字词上会有差异比如“超一等”和“借一算”的位置说明一字之差就可能影响理解。我个人的建议是先看白话翻译把题目意思搞懂再回头逐句对照原文重点是“术曰”那一段。7. 写在最后的实操体会我最初翻《少广》纯粹是好奇古人怎么手算开方。真正按原文布算走了一遍之后最让我意外的是它的“可执行性”——每一个术语都对应一个明确动作分节、议商、定法、加隅跟读程序伪代码差不多。后来我教别人手工开方时干脆直接用这套术语发现比现代竖式更容易讲清楚“为什么”。如果你也想理解古代算法或者想看看什么叫真正的位值制运算建议从这一卷入手别跳过。先拿小数字把流程走通再回去读那段关于“微数”的注文很多疑惑会自己解开。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。