1700995137
1700995138
模运算为什么成立呢?如果a≡b(modm),且c≡d(modm),那么a=b+pm,c=d+qm,p、q是整数。于是,a+c= (b+d) +(p+q)m,所以,a+c≡b+d(modm)。根据FOIL法则,有:
1700995139
1700995140
ac= (b+pm) (d+qm) =bd+ (bq+pd+pqm)m
1700995141
1700995142
因此,ac与bd的差是m的倍数,也就是说ac≡bd(modm)。同余关系a≡b(modm)与自身相乘就会得到a2≡b2(modm),继续与自身相乘就会推导出幂法则。
1700995143
1700995144
正是因为这条幂法则,使得十进制下的9变成了一个非常特殊的数字。由于10 ≡ 1 (mod 9),根据幂法则,10n≡ 1n≡ 1 (mod 9)。因此,像3 456这样的数字满足:
1700995145
1700995146
3 456 = 3×1 000+4×100+5×10+6
1700995147
1700995148
≡ 3×1 + 4×1 + 5×1 + 6 = 3 + 4 + 5 + 6 (mod 9)
1700995149
1700995150
由于10 ≡ 1 (mod 3),因此我们把某个数字的各个数位上的数字相加,就可以判断出这个数字是不是3的倍数(或者说出该数被3除的余数)。在不同的进制下,比如十六进制(常用于电气工程和计算机科学),由于16 ≡ 1 (mod 15),因此我们可以把某个数字的各个数位上的数字相加,判断这个数字是不是15(或者3、5)的倍数,或者说出该数字被15除的余数。
1700995151
1700995152
现在,我们回到十进制。判断一个数字是不是11的倍数,有一个非常简便的方法。它的依据是:由于10 ≡ –1 (mod 11),10n≡ (–1)n(mod 11),所以102≡ 1 (mod 11),103≡ (–1) (mod 11),以此类推。以3 456这个数字为例,该数字满足:
1700995153
1700995154
3 456 = 3×1 000 + 4×100 + 5×10 + 6
1700995155
1700995156
≡ –3 + 4 – 5 + 6 = 2 (mod 11)
1700995157
1700995158
也就是说,3 456被11除的余数是2。因此,判断一个数字是不是11的倍数的一般规则是:当且仅当某个数字各个数位上的数字交替进行减法和加法运算后的结果是11的倍数(例如:0,±11,±22,…)时,这个数字就是11的倍数。31 415是11的倍数吗?通过计算3 – 1 + 4 – 1 + 5 = 10,我们知道它不是11的倍数。但是,31 416这个数字对应的计算结果是11,因此它肯定是11的倍数。
1700995159
1700995160
事实上,在生成和验证ISBN码(国际标准书号)时经常会用到与11有关的模运算。假设你的书号是一个十位数(2007年之前出版的图书大多如此),书号的前几位数字表示该书的国别、出版者和书名,但是最后一位数(校验号)的作用是让这些数字满足某种特殊关系。具体来说,如果这个十位数书号符合a–bcd–efghi–j的形式,那么j的作用是确保这个书号满足以下关系:
1700995161
1700995162
10a+ 9b+ 8c+ 7d+ 6e+ 5f+ 4g+ 3h+ 2i+j≡ 0 (mod 11)
1700995163
1700995164
例如,我写作的《心算的秘密》(Secrets of Mental Math)出版于2006年,它的书号是0–307–33840–1。由于154 = 11×14,因此:
1700995165
1700995166
10×0 + 9×3 + 8×0 + 7×7 + 6×3 + 5×3 + 4×8 + 3×4 + 2×0 + 1
1700995167
1700995168
= 154 ≡ 0 (mod 11)
1700995169
1700995170
也许你有一个疑问:如果根据这个规则,校验号必须是10,应该怎么办呢?在这种情况下,校验号会变成Ⅹ,因为这个罗马数字的意思就是10。有了这个特点之后,如果在输入ISBN时输错了某个数字,系统就可以自动检测出来。例如,如果我的书号第三位数被输错,最后的检验结果就会产生8的倍数的偏差,即偏差为±8,±16,…,±80。但是,由于所有这些数字都不是11的倍数(11是质数),因此发生偏差后的检验结果也不可能是11的倍数。事实上,利用代数运算我们可以方便地证明,如果其中两位数字发生错位,系统是可以检验出这个错误的。例如,其他数位都没有错误,但是c和f这两个数位上的数字彼此交换了位置,那么计算结果的偏差全部来自c和f这两项。计算结果本应是8c+ 5f,而现在的结果是8f+ 5c。两者之间的差是(8f+ 5c) – (8c+ 5f) = 3 (f–c),它不是11的倍数。因此,新的计算结果也不是11的倍数。
1700995171
1700995172
2007年,出版界启用了13位ISBN编码系统,所有的书号都是十三位数,而且采用的是模为10的模运算,而不是之前的模为11的模运算。在这种新的体系下,书号abc–d–efg–hijkl–m必须满足:
1700995173
1700995174
a+ 3b+c+3d+e+ 3f+g+ 3h+i+ 3j+k+ 3l+m≡ 0 (mod 10)
1700995175
1700995176
例如,本书英文版的ISBN是978–0–465–05472–5。简便的验证方法是把奇数位与偶数位上的数字分开,即:
1700995177
1700995178
(9 + 8 + 4 + 5 + 5 + 7 + 5) + 3×(7 + 0 + 6 + 0 + 4 + 2)
1700995179
1700995180
= 43 + 3×19 = 43 + 57 = 100 ≡ 0 (mod 10)
1700995181
1700995182
13位ISBN编码系统可以检测出任何单个数位的错误和大多数(不是全部)连续项位置颠倒的错误。例如,在上面的例子中,如果最后的三位数725误写成275,系统就无法检测到这个错误,因为错位之后的计算结果是110,也是10的倍数。目前,条形码、信用卡和借记卡都采用了模为10的号码验证系统。模运算还在电路和互联网金融安全等方面发挥着重要作用。
1700995183
1700995184
1700995185
1700995186
[
上一页 ]
[ :1.700995137e+09 ]
[
下一页 ]