中国剩余定理“大衍求一术”手算方法及四个习题
2016-01-24
佛山下雪
今天广东佛山下雪。有一些雪花还真有点像鹅毛。这是我退休后移居广东20年来,第一次看到的景像。
一
中国剩余定理解题过程
“中国剩余定理”是公元5-6世纪、我国南北朝时期的一部著名算术著作《孙子算经》中的一个“物不知数”的解法问题:
今有物,不知其数,三三数之剩二,五五数之剩三,七七数之剩二。问物几何?
答曰:二十三。
术曰:「三三数之剩二,置一百四十,五五数之剩三,置六十三,七七数之剩二,置三十,并之,得二百三十三,以二百一十减之,即得。凡三三数之剩一,则置七十,五五数之剩一,则置二十一,七七数之剩一,则置十五,即得。」
用现代数学表示,即:
X≡R1 (mod m1 )
X≡2 (mod 3
)
X≡R2 (mod m2)
→ X≡3
(mod 5 )
X≡R3 (mod m3)
X≡2 (mod 7 )
求物数X
计算步骤及名词注释如下:
1 余数R : 例中 R1=2、R2=3、R3=2
2 模,亦即除数m :例中 m1=3、m2=5、m3=7
3 模的最小公倍数G :G =m1×m2×m3,例中 G
=3×5×7=105
4 衍数(局部公倍数)y
:Y1=m2m3、Y2=m1m3,Y3=m1m2,例中Y1=5×7=35、Y2=3×7=21、Y3=3×5=15
5 计算乘率C
:这是解算中国剩余定理的关键。计算“乘率”的方法,我认为在《孙子算经》年代就已经知道了,只是书上没有详细说明而己。否则怎么会有“三三数之剩二,置一百四十
… 凡三三数之剩一,则置七十 …
”等语呢?因为140=70×2,而2就是“乘率”。到了南宋,秦九韶才在《数书九章》一书中写出计算方法,称之为“大衍求一术”。
“求一”就是使 (衍数Y×乘率C) -模m×商N=余数1。以同余式表示为 :
衍数Y×乘率C≡1 (mod m)。
例中 35C1≡1 (mod 3 ) 、
21C2≡1 (mod 5 ) 、15C3≡1
(mod 7 )。
已知Y、m、1,求C。经计算得C1=2、C2=1 、C3=1。求C的细节,见下面四个习题。
上述各项计算结果见下表:
同余式 i 衍数Y 乘率C 余数R 模m 检验 (Y C -
1)/ m = 整数N
1 35 2 2 3 (35×C-1)/3
=N (35×2-1)/3 = 21
2 21 1 3 5 (21×C-1)/5
=N (21×1-1)/5 = 4
3 15 1 2 7 (15×C-1)/7
=N (15×1-1)/7 = 2
为什么先要算余数为 1
时的乘率C呢?
原来,解题的最终目的是要解算余数为R的同余式Y×X≡R (mod
m),求出X。但必须先算得Y×C≡1 (mod
m) 后,再两边各乘R,得:
Y×C×R≡1×R
(mod m) → X≡R
(mod m) → 才得到X=Y×C×R
这是一个方程的情况。对于多个方程则有:
6 最终:X≡Y1C 1 R1+Y2C2 R2+Y3C3 R3 (mod G) 。见下表
:
同余式i 衍数Y
乘率C 余数R Y×C×
R
1 35 2
2 35*2*2 = 70*2 = 140
2 21 1
3 21*1*3 = 21*3 =
63
3 15 1
2 15*1*2 = 15*2 =
30
Σ 233
X≡233 (mod
105)。X超过模m,不行。于是233 减去105的2倍后,剩下23,即
233-2×105=233-210=23。
最终,X≡23
(mod 105)
这