1、,初等数论,主要内容素数最大公约数与最小公倍数同余在计算机科学中的应用,,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=3337,,19.1 素数,定理 2:如果n是合数,那么n必有一个小于或等于 的素因子。证:如果n是合数,它有一个因子a,使得1 a n, 于是 ,这样 ,这个因子或是素 数,或是有素因子。无论哪种情况,n都有小于或等于 的素因子,例2:证明101是素数。证明思路:101不含有不超过 的素因子。,,19.1 素数,定理 3:有无穷多个素数。,梅森
3、数(Marin Mersenne): 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 最大公约数和最小公倍数,d是a与b的公因子(公约数): d |a且d |bm是a与b的公倍数: a | m且b | m定义3:设a和b是两个不全为0的整数, 称a与b的公因子中最大的为a与b的最大公因子, 或最大
4、公约数, 记作gcd(a,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.
5、即, m是a和b的公因子, 与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、6=2, 13 mod 4=3, 10 mod 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的公因子.,,欧几里得算法-辗转相除法,最大公因数的求法:辗转相除法例5:求gcd(15,36
7、) gcd(54,30) 36=15 2+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) g = x; x = y%x; y = g; return g;,试跟踪求gcd(36,15)时,变量值变化: y x g,C语言代码:,,19-3 同余,定义4: 设m是正整数, a
8、和b是整数. 如果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.
9、,例6:写出Z4的全部元素以及Z4上的加法表和乘法表.,解 Z4=0,1,2,3, 其中i=4k+i |kZ, i=0,1,2,3.,,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. a1(mod m)是方程ax1(mod m)的解.性质: 当a与m互素时, 方程 x a-1(mod m) 有唯一解 即:ax km
10、= 1 当a与m不互素时, 此方程无解。 一个数关于某一个模m的乘法逆元不一定存在。 如 2关于模14的乘法逆元不存在,因为2与14不互素,,扩展的Euclid算法,求乘法逆元:先用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 因此,5关于模14的乘法逆元为3。,,扩展的Euclid算法,例9:求10关于模17的乘法逆元 17 = 10 + 7 10 = 7 + 3
11、 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的乘法逆元为12,,19-4 应用,伪随机数产生随机数:随机变量的观察值伪随机数 (0,1)上的均匀分布U(0,1): a(0a1), P0Xa=a 线性同余法 选择4个非负整数: 模数m, 乘数a, 常数c和种子数x0, 其中2am, 0cm, 0x0m, 用递推公式产生伪随机数序列: xn=(axn1+c) mod
12、 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)的线性同余法, 即 xn=axn1 mod m, n=1,2,.最常用的均匀伪随机数发生器:m=2311, a=75的乘同余法,它的周期是2312。
13、,,密码学,恺撒(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,25,解密算法 D(i)=(ik)mod 26, i=0, 1,25其中密钥k是一取定的整数, 这里取k=3.,,加密算法,线性同
14、余加密算法 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是保密的.,