书城教材教辅中外数学故事
26688100000006

第6章 代数天地的故事(1)

剩余定理的妙用

公元前204年,赵国赵歇的代王陈余等闻知韩信领兵攻赵的消息后,当即同赵王一起集兵20万,置于汉军必经之地井陉口。井陉口是太行山的要隘,地势险峻,易守难攻。大队人马过关,车不能并排,马不能成列,很显然,地利已为赵军所占。

韩信当时所率军队虽号称数万,但真正能打仗的只有几千人,就这些人马也是临时收编、征调而来,缺乏训练,同赵军相比,汉军在兵力上也处于劣势。

开战前,赵国很会用兵的将领李左车向赵王和陈余提出了战胜汉军的妙计:“韩信连战连捷,势如破竹,其弱点在于孤军深入,后勤补给困难,再加上井陉口狭长的山路,汉军粮食辎重肯定不能跟上来。若由我带领3万人马抄小路袭击其辎重,断敌后续;将军等率主力正面坚守,必可使韩信欲进不成,后退不能,再加上军无粮草,不出10天汉军必然失败。”

自恃拥有重兵和占据地利优势的陈余哪里听得进颇有见地的李左车的建议,他根本没把韩信那几千人马看在眼里,口称只要正面迎敌即可取胜,根本用不着再用奇兵。

韩信派人打听得知陈余拒绝采纳李左车的建议十分高兴,这等于给其进攻扫清了一道障碍,于是就率领汉军进驻在距井陉口230里的地方。

就在驻扎的当天晚上,韩信精选轻骑2000人多带武器和红旗,从小道上山并隐蔽在赵军营地的一侧。

韩信对将士们说:“你们守候在此,待赵军见我撤退倾巢出动追击之时,赶快进入赵军营地,把所有的赵旗都换成红旗。”

把这支伏兵布置停当后,韩信又在谋划着敌强我弱情况下的胜敌之计。他针对大部分士卒未经训练的实际,大胆布下了“背水列阵”这一为兵法所忌的险招。韩信派1万人为先锋,渡过绵蔓水而列阵,这样,这支军队背临河水,面向占有地利和优势兵力的赵军,无疑是处于死地。难怪赵军见韩信如此布兵,都讥笑韩信不懂兵法,并认为此战汉军必败无疑。

等天亮以后,韩信率领主力杀向井陉口。陈余遂率军出击迎敌。经过长时间的激战,韩信假装抵挡不住赵军的抗击,率军退入背水阵中。陈余见韩信的军队全部进入背水阵这一绝境,认为这是全歼汉军的良机,就率领赵军倾巢出击。

汉军面对众多赵军的攻击,进不能,退不成,唯有死战才可能有一条生路。汉军将士同赵军展开了一场殊死的搏斗。与此同时,埋伏于赵军营地附近的汉军等赵军一离开营地,趁其内部空虚,一举攻入赵营,很快把2000多汉军红旗插遍了赵营。

却说背水阵前,两军奋战正酣。赵军见汉军作战勇猛,知一时半会儿不能取胜,就想退入营中另作打算。待赵军回首遥望自己的营盘时,个个目瞪口呆,好端端一座营盘顷刻间怎么成了遍插红旗的阵地。还没等他们明白过来,汉军里外夹击,赵军大乱。不多时,20万赵军就为只有数千人马的汉军所败,陈余被杀,赵王歇也当了俘虏。

在这场战役的前一天,刘邦在卫士们的簇拥下来到了练兵场。只见练兵场上聚集着许多士兵,乱哄哄地在那儿舞刀弄剑。刘邦把韩信叫到面前,对他说:“听说你很有干才,是真是假,耳听为虚,眼见为实。现在这兵场上有不少士兵,你能用一刻钟的时间报出准确数目来吗?”

韩信知道汉王是在考自己,二话没说,拿起令旗,开始指挥起来。他先是命令士兵们3个人一组进行操练,结果剩2个人无法归组;接着,他便下令改为5人一组,这一改,则剩3个人无法编排;随后,他又下令7个人为一组,这一次,又剩下2个人无法归队。

在场的人包括刘邦在内,都哈哈大笑起来,以为韩信是瞎忙乎,肯定清点不出具体的人数来。不料,他们的笑声刚落,韩信便高声报道:“共有士兵233人!”刘邦一听愣了,不知韩信是用的什么招数,这么快就清点出了人数。不用说,考试合格了,韩信名正言顺地当上了大将军。

那么韩信到底是如何点兵的呢?秘诀在哪里呢?下面,为了便于弄清这个问题,我们假设这些士兵先后按3、5、7人数列队,它们的余数分别为a、b、c。由题意可立方程式:

x=3n1+a(1)

因为3、5、7的最小公倍数是105,故将(1)式×35。

x=5n2+b(2)

(2)×21,(3)×15,得如下方程:

x=7n3+c(3)

35x=105n1+35a(4)

21x=105n2+21b(5)

15x=105x+15c(6)

(5)+(6)-(4),得x=-35a+21b+15c+(n3-n2-n1)×105=105(n3+n2-a)+70a+21b+15c,令70a+21b+15c=105n4+r,上式变为x=105(n4+n3+n2-n1-a)+r=105n+r(7)。

式(7)表示x有无穷解,r是最小的一个正整数解。105是3、5、7的最小公倍数,将式(7)代入(1)、(2)、(3)式后,无论n取任一正整数,三个余数的值总不变。如设a=1、b=2、c=3,由70a+21b+15c=157=105+52,得r=52。再由式(7)得x=105n+52。即知士兵的总人数为52人、157人、262人……在有无穷解的情况下,韩信又怎能确定士兵总数呢?因为韩信已知士兵的大概人数(设有一二百人),所以他能在得知几次列队的余数后(设a=1、b=2、c=3),很有把握地算出了这部分士兵的总人数(x=105+52=157人)。韩信这种点兵的方法,就是后来闻名于世的“中国孙子定理”。如果你有兴趣,还可以用其他方法进行点兵。现在看来这并非是个难解之题,但就当时来说,这么短时间内就准确地脱口而出,这也决非是寻常之辈所能办到的。

在“韩信点兵”的故事中,如果3个人一组,最后还剩2人,那么总人数可能是5,也可能是8,还可能是11……换句话说,5、8、11……这些数被3除后,余数都相等,那么,我们就说5、8、11……这些数对于3是同余的。用数学符号写出来就是:

5≡8≡11(mod3)这个式子就叫做“同余式”。

在我国,解联立一次同余式问题,源于古人制定天文历法的推算。早在公元5世纪,著名科学家祖冲之,在制定《大明历》时,曾求解过11个联立一次同余式问题。遗憾的是,他只写出了答案,没记述推算程序。在他之后,也有一些天文、数学家对联立一次同余式问题进行过研究探讨,不过,成效都不算大。然而,到了公元1247年,南宋著名的数学家秦九韶,却在他的名著《数学九章》中,对古代联立一次同余式问题的解法,从理论上作了全面的总结。这便是被人们誉为“中国中世纪数学家的一项杰出创造”的“大衍求一术”。

什么是“大衍求一术”呢?通俗地讲,就是求“一个数的多少倍除以另一数,所得余数为1”的方法。这种方法近似于现代的求最大公约数的辗转相除法,在西方,直到公元18世纪,才有人对这个问题进行系统的研究;至于解题方法,则是到了1801年,才被德国数学家高斯发现,并因此把这种方法命名为“高斯定理”。显而易见,高斯的方法比秦九韶晚了550多年;若是与《孙子算经》相比,就更晚了,至少晚1500年。

公元1852年,“孙子问题”的解法传入欧洲,西方数学家们惊奇地发现,该解法竟和高斯的方法完全一样。在感慨之余,便称这种方法为“中国孙子定理”。

格拉特将军巧算二元二次方程

美军从独立战争开始到1861年的内战,只有两人获得过中将军衔,一位是华盛顿,一位是司各脱,其后几年未设这一职位。1864年2月,参众两院通过法案,决定恢复中将军衔,林肯总统批准了这项法案,并将这一新设的军衔授予格兰特。

格兰特是一位颇受争议的将军。在南北战争进行到关键时刻,林肯授予他以最高军衔并委以北军总司令的重任,表现出了非凡的用人胆略。林肯信任格兰特,相信他能将屡屡失败的北军从迷谷中引向光明。

“格兰特将军,在这场伟大的战争中,国家对于你所建树的功勋表示嘉奖,”林肯在授衔仪式上说,“因此,现特授予你合众国陆军中将军衔。给予你这崇高荣誉的同时,也意味着把相应的重任交给你。”在这个仪式上,士兵们排成方队。说来也巧,场上的士兵正好排成62个方阵,每个方阵的人数全一样。整齐的队伍,加上北军士兵个个精神抖擞,整个训练场显出威武雄壮的气派,林肯一看非常高兴,大大夸奖了格兰特一番。

格兰特听到了林肯的夸奖心里非常高兴,他提议要与士兵们站在一起。他脱下战袍,改换轻装,加入了士兵们的行列。格兰特的这一举动打破了原来的方阵,陪同林肯的将军们都为他捏了一把汗。可格兰特不忙不慌,只见他命令士兵改换阵势,把全部士兵(包括自己在内)改排成一个大方阵。说起来真巧,原来的小方阵一下子排成大方阵,而且人数不多不少。这样一来林肯很高兴,格兰特也出尽了风头。你知道他用什么方法吗?这批士兵有多少人呢?

“方阵问题”在我国古算中很常见,也是很有意思的题目。当然,它们的解法不算困难。

设原先62个实心小方阵,每个小方阵的每边人数为x;将军本人也加进去以后,排成的一个大方阵,每边人数为y。

根据题意,可以列出一个方程如下:

62x2+1=y2。

这是一个不定方程,移项分解就得到:

62x2=y2-1=(y-1)(y+1)。

到此地步,就可看出y非等于63不可。因为63-1不多不少恰好就是62,而63+1=64,又正好是8的平方。因此这批士兵共有:62×82=3968(人)。加上将军自己,正好可以排成一个每边有63人的方阵。

三角函数破阵

孙膑与庞涓是同窗好友。庞涓早于孙膑下山前去魏国,被魏王封为大将。孙膑虽有雄韬大略,却不善谄媚之术,四处周游,无人重用。为了施展才华,他投奔到同窗学友庞涓处,希望能向魏王引荐。但是庞涓素知孙膑的才智在自己之上,因而担心引荐孙膑,会抢了他大将的位置,一心想除掉这个隐患,同时,他又耳闻孙膑从老师那里也有所得,想据为己有。他想出一毒计,在魏王前诬孙膑有叛国行为,请魏王对其施以膑刑,让他无法逃脱。

庞涓将受不白之冤的孙膑关在一个秘密的地方,极力表明自己在魏王面前替孙膑说了多少好话,才使他免于一死,同时向孙膑索要《孙子兵法》。孙膑当即答应。

孙膑一直对自己无辜地突遭不幸感到困惑,可万万没有想到原来是同窗好友设下的陷阱,经童仆一说,他才恍然大悟。可是现在他双腿不能行走,又在庞涓的看管之下。当晚他一会儿号啕大哭,一会儿嘻皮笑脸,语无伦次,傻相百出。他将抄好的书简翻出来,投入火中。将食物打翻在地,见了土块和污物,孙膑却抓起来就吃。庞涓相信孙膑确实已成为一个废物,就放松了戒备。

后来一个叫禽滑厘的人听说了孙膑的遭遇,他深知孙膑的才能,就想帮助他逃出魏国。于是他将孙膑的情况告诉了齐国的相国邹忌,邹忌又转告齐王。齐王便派人将孙膑偷偷地带回齐国。孙膑在齐国受到重用。

孙膑所在的齐国与庞涓所在的魏国有多次交战。相传一次庞涓将孙膑的部队围在即墨城中,是孙膑活用鬼谷子所传的阵图使他突出重围,为日后大败庞涓创造了机会。孙膑的部队被庞涓围在即墨已经七天了。内无粮草,外无援兵,诸将忧心如焚,纷纷进帐请战:与其被困死,不如杀出重围,也许还能生还几个呢!

大敌当前,众寡悬殊,作为全军统帅的孙膑,也在筹思对策。

这天晚上,孙膑攀上山顶的那棵老柏树,纵目眺望,只见远处庞兵营房火把映天,兵马屯扎整齐。环视一周,自己正是被困核心,外界形成六角包围,就像被六把钳子紧紧夹住一样。

“全军突围是不可能的了!”孙膑自言自语地喃喃说道。

“元帅,怎么这般泄气?”随从问道。

只见孙膑不慌不忙地答道:“你等有所不知,这阵势名为七曜阵,按日、月、金、木、水、火、土排列,客座应在中心,占日位,为我军所在,受外围‘一月五星’控制,严密包围。‘一月五星’互相牵动,好生厉害,我军倘若妄动,即刻会遭到群起聚歼,后果将不堪设想!”说着,信手在沙地上画个草图。

孙膑心想,要想突围成功,必定要派一员猛将打头阵。只听他大喝一声:“甘蒙听令!”

孙膑手下猛将甘蒙无论如何没有想到会点到自己,自己这两下子,孙膑最清楚。这时他连声叫喊:

“我不行啊,我不行!”

什么行不行?一声惊堂木响:“甘蒙胆敢违抗军令,来人啊,推出去砍了!”

甘蒙慌了,连忙同意:“我去,我去。只怕误了军机,可不是闹着玩的。”

当晚,孙膑设酒席给甘蒙饯行,笑呵呵劝酒。甘蒙却愁肠百结:此去必死无疑,我一死不足惜,可怜数万弟兄都要断送在我手中了!

“孙将军,趁我未去黄泉之前,可还有什么话说?”

“甘将军,何出此言,今晚饮的是庆功酒,此番定能马到成功!”孙膑一边敬酒,一边说下去,“你催动坐骑,径直朝金木门的中心驰出,不去管番将的迎杀,便可安然突围。”

果真如此。两天后,救援的军队会师牛头山,大破七曜阵,直杀得庞涓人仰马翻,溃不成军。甘蒙立下了特等大功。

其中奥妙何在呢?原来孙膑曾命令可靠侦探探得番将坐骑的最快速度,只相当于甘蒙追风马的八成(百分之八十),孙膑估计到甘蒙一出营房(从日位朝金木连线的中点方向),庞涓人马就会分别从六角座位(以日位为中心的正六边形各顶点)冲击,始终紧盯着甘蒙奔驰处靠近,但他们却追不上甘蒙。

你知道这是什么道理吗?

图(甲),当甘蒙从日位出发,径直朝金木门的中心驰出(箭头方向),显然,仅讨论金点(或木点)的敌人追逐情况即可。

图(乙),甘蒙从O点跑至P1,同时金点敌将从A点追至P′1,=080P1;继续前进,则敌将路线成AP1……P′2……P11′曲线。

图(丙),某种不同情况下,甘蒙跑到OH三分点的P处:

敌将追至P1(比曲线要近得多),接着立即抢先到H点拦截,即使这样,他也追不上甘蒙,因为AH=3a,对△AP′H运用余弦定理,则有P′H2=(16a)2+(3a)2=2×16a·3acos30°=076a2,故P′H=0872a,P′H大于PH的八成,即P′H>08a。

所以,当敌将到达H点时,甘蒙已过H点;再继续前进,路线几乎在同一直线,甘蒙马快,愈来愈追不上。

用不定方程算张宗昌有多少兵力

张宗昌是绿林大盗出身,本来肚子里没有什么文化,可说是斗大字不识一筐。作为一军之长更是个糊涂蛋,竟不知自己手下有多少兵!一日,他到某营地视察。该营营长集合了士兵之后,不知是因为紧张,还是与张宗昌一样是个糊涂蛋,点了半天的士兵也没点清。其实,这个营的人数不多,不过300多人。按照当时的排队惯例,两人排一行多出1人,改为3人、4人、5人、6人排一行,也都多出1人,7人排一行却不多不少。我想学过最小公倍数原理的同学们一定可以算得出来。

解这道题有个办法,先求出2、3、4、5、6的最小公倍数是60,推算出士兵总数应该是:60x+1,并且知道60x+1能被7除尽,经过几次试算,就能找出x是什么数,也就知道人数是多少了。

这个办法,实际上是“凑”出个数来,对付较简单的数是可以的。如果我们把题目改一下,把“士兵不超过400人”改为“士兵人数在1000到1200人之间”,或者改为“士兵人数在3900到4200之间”,用凑数的办法就很困难了。如果采用列不定方程的办法,就可以使解答具有普遍性,不论数目的数字多大,总是可以应用这种方法解答的。

设这支队伍有x人。每2人、3人、4人、5人、6人排一行都多出一人,换一句话说,(x-1)能被2、3、4、5和6整除,而2、3、4、5和6五个数的最小公倍数是60,因此(x-1)亦能被60整除。除x-1=y,y应是正整数。变换一下,就列出不6定方程式:

x=60y+1

X能被7整除,即60y+1=8y+4y+1是正整数。设4y+1=777t,t也应是正整数。变换一下,得出:

7t-1

4=t+

设3t-1

3t-1

4=t1,为了使y是正整数,t1亦是正整数,变换一下,得出:

4t1+1

t=3=t1+

t1+1

t1+1

设3=t2,为了使t是整数(并注意t1是正数),t2亦必须是正整数,变换一下,得出:

t1=3t2-1

现在我们来列一个t2与x的关系式,

x=60y+1=60(7t-1)+1=105t-144=105(4t1+13)-14

=140t1+21=420t2-119

t2是正整数,可以取1、2、3……,但题目规定这支队伍不超过400人,所以t2只能取值1,即x=420-119=301,这支部队有301人。

引入这样多未知数,目的就是要求出未知数x的通解(也可以求出y的通解),当取任何整数,我们将得到方程式x=60y+1所有整数解,这样的解,具有普遍性,数学上称为通解。事实上,这一题的解法,基本上已告诉大家,对ax+by=c这种类型的不定方程式,求出所有整解的一般方法。如果你知道,求两个整数最大公约数的“辗转相除”方法(或者将一个分数化成连分数的方法),你就会发现,上面的解法实质上就是“辗转相除”。