1、初等数论v主要内容 素数 最大公约数与最小公倍数 同余 在计算机科学中的应用19.1 素数1. 整除定义1:设a, b是两个整数,且a0, 若存在整数c 使 b=ac,则称b 被a 整除,或 a 整除b,记作 a|b. 此时, 又称 b 是a 的倍数,a是b 的因子. 把 a不整除 b 记作 a b.性质:令a,b,c为整数,有如下结论: 1)若a |b且a |c, 则 x, y, 有a | xb+yc. 2)若a |b且b |c, 则a |c. 3)若 a |b,那么对于所有整数 m0都有 a | mb.19.1 素数2. 素数定义2:大于 1 且只能被 1 和自身整除的正整数称为素数(质数
2、)。大于 1 又不是素数的正整数称为合数。算术基本定理:每个正整数都可以唯一地表示为素数的乘积,其中素数因子从小到大依次出现,即例1:100, 641, 999的素因子分解为: 100=2255=2252 641=641 999=33337=333719.1 素数定理 2:如果n是合数,那么n必有一个小于或等于 的素因子。证:如果n是合数,它有一个因子a,使得1 a n, 于是 ,这样 ,这个因子或是素 数,或是有素因子。无论哪种情况,n都有小于或等于 的素因子例2:证明101是素数。证明思路:101不含有不超过 的素因子。19.1 素数定理 3:有无穷多个素数。梅森数(Marin Merse
3、nne): 2p1, 其中p为素数。 当n是合数时, 2n1一定是合数, 2ab1=(2a1)(2a(b1)+2a(b2)+2a+1).梅森数可能是素数, 也可能是合数: 221=3, 231=7, 251=31, 271=127都是素数, 而2111=2047=2389是合数.到2002年找到的最大梅森素数是2134669171, 有4百万位. 19.2 最大公约数和最小公倍数vd是a与b的公因子(公约数): d |a且d |bvm是a与b的公倍数: a | m且b | m定义3:设a和b是两个不全为0的整数, 称a与b的公因子中最大的为a与b的最大公因子, 或最大公约数, 记作gcd(a,
4、b). 设a和b是两个非零整数, 称a与b最小的正公倍数为a与b的最小公倍数, 记作lcm(a,b). 例3 gcd(12,18)=6, lcm(12,18)=36. 对任意的正整数a, gcd(0,a)=a, gcd(1,a)=1, lcm(1,a)=a. 19.2 最大公约数和最小公倍数定理4: (1) 若a | m, b | m, 则 lcm(a,b)| m.(2) 若d |a, d |b, 则d | gcd(a,b).证 (1) 记M=lcm(a,b), 设m=qM+r, 0rD, 注意到d |a, D|a, 由(1), 得m |a. 同理, m |b. 即, m是a和b的公因子, 与
5、D是a和b的最大公约数矛盾. 19.2 最大公约数和最小公倍数利用整数的素因子分解, 求最大公约数和最小公倍数. 设 其中p1,p2,pk是不同的素数, r1,r2,rk,s1,s2,sk是非负整数. 则 gcd(a,b)= lcm(a,b)=例4 求150和220的最大公约数和最小公倍数.解 150=2352, 168=2337. gcd(150,168)=21315070=6, lcm(150,168)=23315271=4200. 欧几里得算法-辗转相除法除法算法: a=qb+r, 0r |b|, 记余数r=a mod b 例如, 20 mod 6=2, 13 mod 4=3, 10 m
6、od 2=0定理5: 设a=qb+r, 其中a, b, q, r 都是整数, 则 gcd(a,b) = gcd(b,r).证明:只需证a与b和b与r有相同的公因子. 设d是a与b的公因子, 即d |a且d |b. 注意到, r=aqb, 由性质可得d |r. 从而, d |b且d |r, 即d也是b与r的公因子. 反之一样, 设d是b与r的公因子, 即d |b且d |r. 注意到, a=qb+r, 故有d |a. 从而, d |a且d |b, 即d也是a与b的公因子. 欧几里得算法-辗转相除法v 最大公因数的求法:辗转相除法 例5:求gcd(15,36) gcd(54,30) 36=15 2+
7、6 54=30+24 15=6 2+3 30=24+6 6=3 2+0 24=4 6+0因此,gcd(15,36)=3 gcd(54,30)=6 原理: gcd(a,b) = gcd(b,r) 这里,gcd(36,15) = gcd(6,15) = gcd(6,3) = 3 欧几里得算法-辗转相除法int gcd(int x,int y) int g; if (x 0) x = -x; if (y 0) g = x; x = y%x; y = g; return g; 试跟踪求gcd(36,15)时,变量值变化: y x gC语言代码: 19-3 同余定义4: 设m是正整数, a和b是整数.
8、如果m|ab, 则称a模m同余于b, 或a与b模m同余, 记作ab(mod m). 如果a与b模m不同余, 则记作a b(mod m).例如, 153(mod 4), 160(mod 4), 14 2(mod 4), 15 16(mod 4). 下述两条都是a与b模m同余的充分必要条件:(1) a mod m = b mod m.(2) a=b+km, 其中k是整数. 19-3 同余性质:同余关系是等价关系。模m等价类: 在模m同余关系下的等价类. am, 简记作a。 Zm: Z在模m同余关系下的商集。在Zm上定义加法和乘法如下: a, b, a+b=a+b, ab=ab. 例6:写出Z4的全
9、部元素以及Z4上的加法表和乘法表.解 Z4=0,1,2,3, 其中i=4k+i |kZ, i=0,1,2,3. 0123 0 1 2 3+0 1 2 31 2 3 02 3 0 13 0 1 2 0123 0 1 2 30 0 0 00 1 2 30 2 0 20 3 2 1 19-3 同余例7: 3455的个位数是多少?解:设3455的个位数为x,则3455x(mod10).由341(mod 10), 有 3455=34113+3337(mod 10),故3455的个位数是7. 19-3 同余 模m逆定义5 如果ab1(mod m), 则称b是a的模m逆元, 记作a1(mod m)或a1.
10、a1(mod m)是方程ax1(mod m)的解.性质: 当a与m互素时, 方程 x a-1(mod m) 有唯一解 即:ax km = 1 当a与m不互素时, 此方程无解。 一个数关于某一个模m的乘法逆元不一定存在。 如 2关于模14的乘法逆元不存在,因为2与14不互素扩展的Euclid算法v 求乘法逆元: 先用Euclid算法求得gcd(a, n) = 1 从1开始逆推,直到得到1 = ax kn 则x为a关于模n的乘法逆元例8:求5关于模14的乘法逆元 辗转相除:14 = 5 2 + 4 5 = 4 + 1 逆推:1 = 5 - 4 = 5 - (14 - 5 2) = 5 3 - 14
11、 因此,5关于模14的乘法逆元为3。扩展的Euclid算法例9:求10关于模17的乘法逆元 17 = 10 + 7 10 = 7 + 3 7 = 3 2 + 1 1 = 7 - 3 2 = 7 - (10 7) 2 = 7 3 - 10 2 = (17 10) 3 - 10 2 = 17 3 - 10 5 = 17 3 - 17 10 + 17 10 - 10 5 = 10 12 - 17 7 所以10关于模17的乘法逆元为1219-4 应用v 伪随机数产生 随机数:随机变量的观察值 伪随机数 (0,1)上的均匀分布U(0,1): a(0a1), P0Xa=a 线性同余法 选择4个非负整数:
12、模数m, 乘数a, 常数c和种子数x0, 其中2am, 0cm, 0 x0m, 用递推公式产生伪随机数序列: xn=(axn1+c) mod m, n=1,2, 取 un=xn/m, n=1,2, 作为U(0,1)伪随机数. 19-4 应用线性同余法产生的序列的质量取决于m, a和c. 例如m=8, a=3, c=1, x0=2, 得到7,6,3,2,7,6,周期为4 m=8, a=5, c=1, x0=2, 得到3,0,1,6,7,4,5,2,3,0,1, 周期为8. a=0, 得到c, c, c,a=1, 得到x0+c, x0+2c, x0+3c, 乘同余法: c=0(x00)的线性同余法
13、, 即 xn=axn1 mod m, n=1,2,.最常用的均匀伪随机数发生器:m=2311, a=75的乘同余法,它的周期是2312。密码学恺撒(Caesar)密码加密方法: ABCDEFGH I J KLMNOPQRS TUVWXYZ DEFGH I JKLMNO PQRS TUVWXYZ ABC明文: SEE YOU TOMORROW密文: VHH BRX WRPRUURZ 18 4 4 24 14 20 19 14 12 14 17 17 14 22 21 7 7 1 17 23 22 17 15 17 20 20 17 25加密算法 E(i)=(i+k)mod 26, i=0, 1,
14、25,解密算法 D(i)=(ik)mod 26, i=0, 1,25其中密钥k是一取定的整数, 这里取k=3. 加密算法线性同余加密算法 E(i)=(ai+b)mod 26, i=0, 1,25,其中a与26互素. 维吉利亚(Vigenere)密码把明文分成若干段, 每一段有n个数字, 密钥k=k1k2kn,加密算法 E(i1i2in)=c1c2cn,其中cj=(ij+kj)mod 26, ij=0,1,25, j=1, 2, n. RSA公钥密码 私钥密码:加密密钥和解密密钥都必须严格保密公钥密码 (W.Diffie,M.Hellman,1976 ):加密密钥公开,解密密钥保密RSA公钥密码(R. Rivest, A. Shamir, L. Adleeman,1978) 取2个大素数p和q(pq), 记n=pq, (n)=(p1)(q1). 选择正整数w, w与(n)互素, 设d=w1(mod(n). 将明文数字化, 分成若干段, 每一个明文段mn. 加密算法 c=E(m)=mwmod n,解密算法 D(c)=cdmod n,其中加密密钥w和n是公开的, 而p,q, (n)和d是保密的.