书城教材教辅中学理科课程资源-漫话数学故事
15181100000001

第1章 千古无同局

围棋是我国人民创造的,至今已有四千余年的历史。围棋爱好者都知道,围棋的棋局千变万化,自古以来,还几乎没有出现过完全相同的棋局,因此古人云:“千古无同局。”围棋棋局究竟有多少变化呢?这是一个简单的计算排列总数问题。很早以前,我国有两位天文、数学家就曾进行过研究,计算得出了结果。

从和尚到数学家

张遂(僧一行,公元683—727年),是唐代的天文学家和数学家。他的祖父和父辈均在朝做官,得了许多封地。但由于武则天当女皇帝后,为限制唐初功臣、贵族的势力下令收回封地,少年时代的张遂变成了一个穷孩子,连吃饭都要靠别人救济。张遂从小就爱读书,勤奋用功,据《旧唐书》说“一行少聪敏,博览经史,尤精历相”。他很快成为长安城小有名气的青年学者。

在他21岁那年,武则天的侄子武三思的家仆找上门来,要他与武三思结交。武三思是一个不学无术,靠阿谀奉承爬上梁王宝座的人;他仗势欺人,残害百姓,无恶不作,现在想借学者装潢门面,欲博取“礼贤下士”的美名,要和张遂做朋友,这对品性耿直、不阿权贵的张遂来说,他是不愿结交权贵而往上爬的。为了躲避武三思,张遂出家当了和尚,法名一行,成了唐代高僧。

一行在佛门下,仍继续研究天文和数学。他的记忆能力惊人。据传,一篇有数千字且字句怪僻的文章,他看过一遍之后,便能一字不漏地背诵出来。他曾“访求贤师,不远数千里”。例如,他听说浙江天台山有一和尚精通数学,就从河南步行上千里去拜师求教。后来,一行在天文、数学上研究出了名,得到了皇帝唐玄宗的礼遇,多次请他当大官,都被他拒绝了。鉴于当时的月蚀预报不准,他受命主持编制新历书《大衍历》,于唐开元十五年(公元727年)草成,这是中国历史上优秀的历法之一。在编制《大衍历》中,一行创立的“自变量不等间距二次内插法”是一项重要的数学成就。此外,他在编制《大衍历》中的其他数学成就还有三次差分、等差级数求和、二次方程求根公式等项,他还是世界上第一个实测子午线长度的人。为了纠正古书上记载:南北地隔千里,则8尺高竿在日影中影长相差一寸即“寸差千里”的错误说法,他组织了全国12个点的大地测量。他测得的子午线数据与现代数据只相差11公里多一点,是实在了不起的杰出成就。

一行为人刚直不阿,奉公守法,不徇私情,有一次他竟敢向皇帝提出批评。又有一次,他幼年时的邻居王老太太找一行,因小时候的一行得到过她大量的周济,老太太要求一行搭救她犯有杀人死罪的儿子,过去,一行曾想方设法要报答王老太太。当时的一行,在皇帝面前说话很有作用,可是一行却对恩人说:“如果你老人家需要金钱布匹,我可以十倍报答,但对此事,我不能徇私枉法。”老太太气愤地指着一行大骂说:“认识你这样的人有什么用!”一行始终没答应她的要求。

僧一行的一生,是治学刻苦勤奋,品德高尚,学术成就卓越的一生。

有趣的是,他曾对围棋感兴趣,研究过棋局。在《心机算术话》一卷里,计算过围棋的“棋局都数”。围棋棋盘横直方19路,共有19×19=361个交叉点着子位置,每个位置都有布置黑子、白子、留空的三种不同情况,算作不同棋局,那么共有多少棋局呢?一行得出棋局总数一共有3361种可能,其值有769位之多。一行是怎样算出来的,书中没有记载。他决不是用大数阶乘公式计算出来的,因大数阶乘公式是欧洲数学家斯特灵(J.Stirling,1692—1770年)于1730年首次获得的,晚于一行一千年。

棋盘上的数学

约四百年后,博学多才的北宋科学家沈括(1031—1095年),他在数学的高阶等差级数求和问题(称“隙积术”)、求弧长方法(称“会圆术”)以及测算、对策、物理、天文、气象、工程技术、生物和医学等方面都做出了巨大贡献,写成号称“中国科学史上里程碑”巨著《梦溪笔谈》一书。沈括读到一行的著作,发现“棋局都数”只有结论没有计算过程,引起了他的注意。

一天沈括遇朋友来访,非常高兴,便向朋友讲起一行大师只有结果没有计算过程的“棋局都数”说:“我近来无事,便专心研究这个问题,终于研究出三种计算方法。现在已经算出来了,并找到了一个简单的方法,只是答数太大,如果用文字写,要连写43万个字!”

沈括究竟是怎样考虑呢?他在《梦溪笔谈》第十八卷里收录了这个对运筹学、博弈学都有价值的计算棋局问题:

先看最简单的情形,如果围棋盘上只有纵横两路,那么我们称为“方二路”,有4个格点,每个格点上都有三种可能,即布置白子、黑子和空位,很明显,可变出3×3×3×3=34=81(局)。

同样的道理,“方三路”有9个格子,可变出:

3×3×3×3×3×3×3×3×3=39=19683(局);

“方四路”有16个格点,可变出:316=4304672l(局);

“方五路”可变出:325=847288609440(局);

“方六路”可变出:336=150094635282031926(局);

最后,“方十九路”,有361个格点,故可变出:3361=1.74…×1000043局不同棋局总数。因此,沈括认为,棋路总数大得很,“非世间名数可能言”(已有的名数都不够用)。

今天,学过对数的人,可以不费吹灰之力验证900多年前大科学家沈括的结论的正确性。令x=3361,lgx=361lg3≈361×0.4771=172.2331,查反对数表,x≈1.71×10172=1.71×(104)43。又因104是万,故棋局总数是连写43个万的1.71倍,真是大得很。

从理论上讲,上述结果是正确的。只是在实际下棋时,上述有些棋局不合棋理的。但远在11世纪,沈括仅利用笨重且繁琐的筹码工具,居然能计算出如此庞大的数字,这不得不令人赞叹!

张遂、沈括不仅用数学证明了“千古无同局”的真理,而且灵巧地运用了指数运算法则am·an=am+n等数学原理,算出了这个巨大的天文数。

当时计算这样的排列总数,张、沈二公的计算方法决不是用传统的普通方法(包括对数运算,对数是17世纪才发现的),显然,是按某种规律求出的。令人遗憾,先辈们没有记录下来。如果我们设想这个问题用现代每秒钟运行1亿次的电子计算机来算,3台这样的计算机每年也只能运行1016次,这就是说需要10156年。9位数为1亿,则10156有157位数,故约要17.4亿年才能运算的次数达到3361。因此对“棋局都数”的计算来说,可以说是我国古代计算技术的巧妙性和先进性的证明。

许多读者也许喜欢下棋,但除了“纹枰对座,从容谈兵”外,又有谁能想到还有上面这些有趣的问题呢?