不同于希腊数学的公理化论证(以欧几里得《几何原本》为代表),中国古代数学是算法式的数学。它注重通用的方法,而不是特殊的技巧。
林开亮(首都师范大学数学博士,目前任教于西北农林科技大学理学院)最近读到物理学家和科技史家程贞一教授的访谈录(标题是“我的人生经历与学术生涯”,作者郭金海),他提到早年的一个感受:上初中时,他对中国古代数学萌发了兴趣。那时他在念代数,教科书是《范氏大代数》。那时一直困惑他的一个问题是:为什么我们的数学教科书上没有一个来自中国文明的定理和成就?
正是这个疑问引导程贞一后来慢慢走向了科学史的研究,最终取得了杰出的成就。与他相仿,我在年少时也渴望了解中国古代数学,然而教科书上很少提及这段历史。即便到了大学、上了数学系、念了研究生、翻了好多书,我对中国古代数学的认识还是很模糊。直到工作之后,我偶然读到吴文俊先生的几篇分析中国古代数学的文章,才豁然开朗。
照我的解读,吴文俊先生的意思是,中国古代数学其实只有一个关键字:术。
吴先生在《对中国传统数学的再认识》中的原话如下:大体说来,中国数学的古典著作大都以依据不同方法或不同类型分成章节的问题集的形式出现。每一个别问题又都分成若干个条目。条目一是“问”,提出有具体数值的问题。条目二是“答”,给出这一问题的具体数值解答。条目三称为“术”,一般来说乃是解答与条目一同一类型问题的普遍方法,实际上就相当于现代计算机科学中的“算法”,但有时也相当于一个公式或一个定理。
条目四是“注”,说明“术”的依据或理由,实质上相当于一种证明。宋元以来,可能是由于印刷术的发达,往往加上条目五“草”,记述依据“术”得出答案的详细计算过程。
这里应特别提出条目三“术”的作用。虽然条目一、二中的问与答都以具体数值表达,有时甚至术文本身也是如此,但不难看出所有术文都具有普遍意义。术文中即使带有具体数值,这些数值并不起重要作用。如果以其他同类型的数值来代替,术文也依然行之有效。
条目四的“注”或即证明也是如此。论证的正确性完全不依赖于原设数值的特殊性。例如,《九章算术》第九章勾股的第一、二、三的三个问题,都是以勾三、股四、弦五为例,知其二求其第三者。求法名为勾股术,术文曰:“勾、股各自乘,并而开方除之,即弦。”显然,这是从勾股求弦的一般方法,与具体数值三、四、五无关。勾股术的注或即证明也是如此。
因此,问、答或术文中的具体数值,只起着一种举例说明的作用,同时也指出了术即一般方法的来历或动机。
在最近出版的《走自己的路——吴文俊口述自传》(湖南教育出版社,2015年)中,吴文俊先生着重指出:机械化,贯穿中国古代数学的思想是机械化,中国古代数学的特点就是构造性和机械化。中国古代数学是着重解决实际问题,它的方法是“机械”的,跟西方数学的证明不一样,灵机一动什么的。中国古代数学不讲这个,没有什么灵机一动,都是死板的。这是我的发现,这是我真正读懂了中国古代数学。
吴先生这里所谓的机械化,就体现在“术”的作用,相当于现代计算机科学中的“算法”。读到这里,就容易明白,为什么一直以来我们称数学为“算术”了:因为“术”正是中国古代数学的精髓。改称“算学”为“数学”,还是近代的事情。民国时期,北大有“数学系”,而清华的则叫作“算学系”。他们认为是一样的,但不想用同样的名字,因为互相不服气。
吴文俊先生一直强调,不同于希腊数学的公理化论证(以欧几里得《几何原本》为代表),中国古代数学是算法式的数学。
这不难理解,只要看看我们的前辈创造了多少“术”:更相减损术(《九章算术》,求两个整数的最大公因子)、盈亏术(《九章算术》,线性插值法)、方程术(《九章算术》,解线性方程组的方法,国外称高斯消去法)、割圆术(刘徽、祖冲之,用圆的内接正多边形的面积作为圆面积的近似,从而得到圆周率的近似值)、球积术(刘徽、祖暅,计算球的体积)、天元术(李冶,设未知数解方程)、大衍求一术(秦九韶、黄宗宪,解同余方程,主要结果表述为中国剩余定理)、增乘开方术(贾宪、杨辉)、正负开方术(刘益、秦九韶,英国数学家霍纳后独立发现)、四元术(朱世杰,天元术的推广,解四个未知数的方程组)、隙积术(沈括)、垛积术(杨辉、朱世杰)、招差术(王恂、郭守敬、朱世杰)、尖锥求积术(李善兰)。
正如吴文俊先生所总结的:“中国古代数学,就是一部算法大全。”所以要了解中国古代数学,就要了解一些代表性的算法。以下我们选取其中几项,略为介绍。
更相减损术:第一个例子是吴文俊先生本人举的,即求两个正整数的最大公因子的“更相减损术”。一个典型的例子是求最大公约数,中国古代叫“更相减损术”。中国古代数学中,把最大公约数叫做“等数”,术曰:以少减多,更相减损,求其等也。就这么几句话!
比如说,要求24和15的最大公约数,也就是 “等数”,“更相减损术”的步骤如下:(24,15) → (9,15) → (9,6) → (3,6) → (3,3)。因此“等数”为 3。真漂亮!
“更相减损术”来自《九章算术》,一般简称《九章》,它是中国第一部数学专著,一共有九章内容。
《九章》定型不晚于公元100年,但其作者不可考,后世流行的版本是经三国时期数学家刘徽加工之后的《九章算术注》(公元263年出版)。刘徽在《九章算术注》中曾明确指出,“更相减损术”的原理在于:在运算过程中,整数逐步减小,但其等数却始终保持不变。顺便提一句,《九章》中主要是利用“更相减损术”来约分,所以它完全包含在“约分术”中:“副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。
”就是求出分子、分母的最大公因子(等数),然后分子分母同除以最大公因子。
在现代教科书中,通常用“辗转相除法”(也称为欧几里得算法)来求两个正整数的最大公因子。它是“更相减损术”的一个变体,其基础是所谓的带余除法。带余除法定理:设a和b是两个整数,其中b>0 ,则存在唯一的整数q和r使得a=qb+r,(其中r满足0≤r<b)。
定理中的q称为a除以b的商,可以用下述性质刻画:qb是b的所有的倍数中不超过a最大的一个;r称为a除以b的余数,由r=a-qb确定。带余除法名称的由来,在于等式右边有余数r。当余数r=0时,称b整除a,而且b就是a,b的最大公因子。
我们不拟介绍欧几里得算法,是因为在解决另一个与求最大公因子问题关系非常密切的问题时,中国古代的数学家本质上创造了同样的算法,只不过它换了一个名字,叫“求一术”。
大衍求一术:简单地说,求一术,就是求解下述方程ax≡1(mod b)的算法。这里a,b是给定的非零整数,x是要求的整数,它满足方程ax≡1(mod b)是指,ax除以b的余数为1。
北宋数学家秦九韶发明了一种求一术,他在1247年出版的《数书九章》中命名为“大衍求一术”(“大衍”的来由:在序言中,秦九韶把这一方法与《周易》“大衍之数”附会)。后来,清代数学家黄宗宪进一步简化了秦九韶的方法。我们现在介绍的,是这个简化的版本。
不同于欧几里得的辗转相除,秦九韶‐黄宗宪的方法是用矩阵。首先写出一个 2 行 2 列的阵,其中a,b,1都是源自方程(1),只有0是补充进来的。
秦九韶‐黄宗宪的方法(求一术)如下:对第一列的数a,b使用带余除法(较大的数除以较小的数)。设得到的商为q,则较大的数那一行减去较小数的那一行对应元素的q倍。于是新得到的矩阵的第一列两个元素替换为第一次带余除法的除数与余数。重复之前的操作,直到某一步带余除法得到的余数为 1(算法结束)。此时1正右方的数,即为所求的x。求一术,实际上就是“得1”的方法,因此又名“得一术”。
作为例子,我们用秦九韶‐黄宗宪的方法来求5x≡1(mod 7)的一个解。解:求一术步骤如下:根据求一术,1的右边的数,就是x的一个解,即x=3。这是很容易验证的:5·3=15≡1(mod 7)。
当然,你或许以为我是把问题搞复杂了,你甚至在一开始就试出来x=3是一个解。然而,正如吴文俊先生多次强调的,中国古代数学讲究的是一种算法,是一种威力极强的基本功夫。毫不夸张地说,简直可以遇妖除妖遇魔降魔。简单的例子你用技巧可以解决,但如果我换成一个稍微复杂一点的例子,如解方程250x≡1(mod 2017),你若是还想故技重施,就没那么幸运了!
说到这里,我想起著名数学家、数学教育家波利亚(George Pólya)的一句名言:“使用过一次的是技巧,使用过两次以上的技巧就有可能发展为一种方法。”正所谓“大智若愚,大巧若拙”,中国古代数学,注重的是通用的方法(“法”“术”同义),而不是特殊的技巧。读者若想领教秦九韶‐黄宗宪的求一术的威力,不妨用上面的方程250x≡1(mod 2017)一试!
不难发现,秦九韶‐黄宗宪的求一术与求最大公因子的欧几里得算法是相通的。作为例子,我们用矩阵格式写出求250与2017的最大公因子的过程如下:在上述欧几里得算法中,直到某一步带余除法得到的余数为 0(算法结束),此时另一个数(这里就是1)即为最大公因子。当然,在我们的例子中验证十分容易,通过分解因子250=2×5×5×5 ,不难发现2017和250的公因子只有1。
(事实上,2017是素数,但要徒手确认这一点,比上述求公因子的问题困难多了!)
方程术:学过线性代数的读者应该会想起来,求一术本质上就是解线性方程组的初等行变换法,也称高斯消去法。因此,可以想见,秦九韶的求一术可能脱胎于“方程术”。“方程术”出自《九章算术》第八章,这一章详述了线性联立方程组的解法并引进了负数。按现代语言,“方程”这一术语的最好解释就是“方阵”。
实际上,“方”的字面意义为正方形或矩形。“程”,按刘徽在《九章算术注》里的解释, 就是把数据在盘上摆成矩阵:“并列为行, 故谓之方程”。 因此,解法便是纵横移动算筹,如我们上面所展示的那样。
天元术与四元术:中国古代数学的高峰是在宋元时代,其代表人物是秦九韶、李冶和朱世杰。前面我们介绍了秦九韶和黄宗宪的大衍求一术,接下来我们介绍一下李冶的天元术和朱世杰的四元术。
天元术其实就是设未知数解方程的方法。元就是未知数,“天元”就是未知数的名称。打个比方,“天元”相当于“嫌疑人X”,其中“元”相当于“嫌疑人”,“天”相当于“X”。我相信每个人都对这种方法的威力深有体会,尤其是刚接触这个方法的小学生。其实, 我们每个人在小学就已经接触到中国古代数学的杰出成就了,只是我们没有被告知而已!
国家自然科学基金中有个数学专项基金名叫“数学天元基金”,命名就来自“天元术”。四元术,是天元术的推广。四元是指“天、地、人、物”四元,相当于说四个未知数x,y,z,w。天元术是求解带有一个未知数的方程的方法;而四元术则是求解带有四个未知数的方程组的方法。
“四”在此并无特殊含义,只是多项式中各项系数要摆在盘上的固定位置,这就限定了未知数的个数不超过四。
因而对于懂“四元术”的人来说,这个方法不难推广到任意多个未知数。然而,宋元之后,中国古代数学就盛极而衰了,以至朱世杰的“四元术”没有被后人继承发展(甚至当利玛窦在明代来到中国时,中国已经无人懂《九章》了!)。直到 20 世纪,在计算机兴起和数学机械化思想复苏的背景下,朱世杰的这一工作最终启发吴文俊开创了几何定理机器证明的“吴方法”。
吴文俊甚至这样说:“这里所谓本人所创立的方法,事实上无非是朱世杰四元术的现代化推广形式。”
结语:在一次访谈(标题是“走进吴文俊院士”,作者黄祖宾)中,吴文俊先生说到:最早的几何学、最早的方程组、最古老的矩阵等等,翻开历史,中国曾经是一个数学的国度,中国数学在世界上的位置远比今天靠前。祖冲之、刘徽、《九章算术》、《周髀算经》、《四元玉鉴》等一批大家和著作,使中国数学曾经处于世界巅峰。正是由于这些辉煌,中国数学,不仅要振兴,更要复兴!
就我个人的感觉,从前学数学,在课本上读不到中国古代数学的成就, 确实有些打击士气,下意识里就觉得我们中国人,是不是不适合学数学?如果当初有幸从吴文俊先生的文章中 了解到一些中国古代数学思想,我想我可能会学得更好些,甚至有可能专门研究中国古代数学。笔者这里并没有要扬中国古代数学而抑希腊古代数学的意思,只是想告诉读者,从风格上讲,中国古代数学具有鲜明的算法特色,这是中国古代数学的精髓所在。
无论如何,我要向所有对中国古代数学感兴趣的读者,推荐吴文俊先生的文章。要知道,这位荣获2000年首届国家最高科技奖的大数学家曾经说:“对中国古代数学的研究,是我最得意的,拓扑的那些工作不算什么。我感到最得意最自豪的是:真正懂了中国古代数学是怎么回事。”
如果我抛此砖能引出美玉,这篇小文的目标就达到了。致谢:感谢陈关荣、李良攀、刘云朋诸位教授和潘颖女士对初稿提出的宝贵意见!