《孙子算经》之“物不知数”是这样说的:有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?
元代秦九韶的解答则是:三人同行七十稀,五树梅花廿一支,七子团圆正半月,除百零五便得知。
这歌诀隐含一种算法。本文就以此为引子陈述一种新的“数”——有限域的元素。
固定一个正整数6.通过对它做除法,可以把所有整数分成6类:
被6整除的数{...-12,-6,0,6,12,18,...}、除6余1的数{...,-11,-5,1,7,13,19,...}、除6余2的数{...,-10,-4,2,8,14,20,...}、...、除6余5的数{...,-13,-7,-1,5,11,17,...}。
倘若将这6个类分别记为[0],[1],[2],[3],[4],[5],称为“模6的同余类”。这些类之间可以进行运算:比如,从[4]里取一个数10,再从[5]里取一个数17,把它们相加,10+17=27,它落在类[3]里,这样,我们定义[4]+[5]=[3]。如果在[4],[5]两个类里取另外的代表,比如取[4]里的-2,[5]里的11,相加得-2+11=9,还是落在[3]里。很容易证明,无论怎么选这两个代表,加起来都落在[3]里。所以我们现在定义的[4]+[5]=[3]这种运算是合理的。
同样的实验表明,减法和乘法也可以类似地定义:比如,[1]-[2]=[5],[2]×[3]=[0].这说明模6的同余类之间是可以做运算的!
不止如此,这些运算还具有跟普通运算相似的性质:
比如,[0]+[3]=[3],[0]+[4]=[4],零的同余类在加法中没有效果;
[0]×[1]=[0],[0]×[3]=[0],零的同余类乘上别的同余类都得[0];
[1]×[2]=[2];[1]×[3]=[3],表明1的同余类在乘法中没有效果(换句话说,[1]是乘法的单位元)。
有了乘法单位元,就可以试图定义“倒数”(严格地说,“倒类”):
比如,[5]×[5]=[1],就定义[5]-1=[5].
可惜,不是每个同余类都有“倒数”,[2]就没有倒数,这是因为[2]×[0]=[0],[2]×[1]=[2],[2]×[3]=[0],[2]×[4]=[2],[2]×[5]=[4],都不等于[1].
哪些同余类有倒数呢?答案是:那些与模数互素的同余类有倒数。比如,模数为6的时候,[1]和[5]有倒数,因为它们与6互素。(互素的意思是,最大公约数为1。在这种情况下可以应用欧几里得的《几何原本》中记载的“辗转相除法”来求同余类的倒数。)
显然,同余类的性质跟模数有关。前面举的例子都是以6为模数,即考虑除6的同余类。严格的记号必须将这个关联反映出来。我们应该记上述例子中的同余类为[4]6,括号中是余数,下标是模数(除数)。
现在来尝试研究一下《孙子算经》的“物不知数”问题。3,5,7的最小公倍数是105.如果找到一个解x,则x+105还是一个解,因为它们在除以3,5,7时“同余”,如果x满足“物不知数”的条件,x+105也必然满足。用这篇文章里介绍的数学语言,我们说“物不知数”问题的解是一个“模数为105的同余类”。现在我们只需要求得此同余类中任何一个数即可。
我们把“物不知数”的条件列出:[x]3=[2]3,[x]5=[3]5,[x]7=[2]7.
求解的办法实际上是“拆分”。也就是说,我们先来求三个数a,b,c,分别满足较简单的条件:
[a]3=[1]3,[a]5=[0]5,[a]7=[0]7.
[b]3=[0]3,[b]5=[1]5,[b]7=[0]7
[c]3=[0]3,[c]5=[0]5,[c]7=[1]7
如果能简单地求得这三个数a,b,c,那么我们容易看到,x=2a+3b+2c即为原”物不知数“问题的一个解。这是因为我们刚刚介绍过的[1] [2] [3] 下一页
|