1、第8章 数论入门,本章内容,素数模运算Euclid算法费马定理和欧拉定理素性测试中国剩余定理离散对数,费尔马定理和欧拉定理,费尔马(Fermat)定理: 若p是素数,a是正整数且gcd(a, p)=1,则ap-11 mod p。证明:考虑集合1,2,p-1,对每个数乘以a,得到集合 a mod p,2a mod p,(p-1)a mod p, 两两不同且都在 1与p-1之间,因此两个集合相同:a mod p, 2a mod p, (p-1)a mod p=1,2,p-1 所以 :(p-1)! mod p = 12(p-1) a2a(p-1)a (a mod p)(2a mod p)(p-1)a
2、 mod p) mod p (p-1)!ap-1 mod p 由于(p-1)!与p互素,因此(p-1)!有乘法逆元,由乘法可约律得ap-11 mod 推论:设p是素数,a是任一正整数,则ap a mod p,欧拉函数,设n是一正整数,小于n且与n互素的正整数的个数称为n的欧拉函数,记为(n)。 例如: (6)=2 ,(7)=6 ,(8)=4。若n是素数,则显然有(n)=n-1。定理:若n是两个互异的素数p和q的乘积,则(n)=(p)(q)=(p-1)(q-1) 例如: 由21=37,得(21)=(3)(7)=26=12,回顾欧拉函数的求值公式,若n是两个互异的素数p和q的乘积,则(n)=(p)
3、(q)=(p-1)(q-1),费尔马定理和欧拉定理,欧拉(Euler)定理:若a和n互素,则a (n) 1 (mod n);证明: R=x1,x2,x(n)为所有小于n且与n互素的正整数,考虑集合: S=(ax1 mod n), (ax2 mod n), (ax(n) mod n) (axi mod n)与n互素 (axi mod n)两两不等:(axi mod n) = (axj mod n) xi mod n = xj mod n S有(n)个元素 故S也是所有小于n且与n互素的正整数,因此S=R,从而: xi=(axi mod n)(axi) mod n (a(n) xi) mod n
4、注意到xi 与n互素,从而得到结论.欧拉(Euler)定理推论: a (n)+1 a (mod n) 若n=pq, pq都是素数, k是任意整数,则: mk(p-1)(q-1)+1 m mod n, 对任意0mn,素性检验,素性检验是指对给定的数检验其是否为素数直接判断一个整数是否为素数是困难的;对于大数的素性检验来说没有简单直接的方法,目前常用的是概率检验法,如Miller-Rabin算法素数分布密度:在n 附近平均每隔(ln n)个整数就有一个素数。这样在找到一个素数之前,平均要测试大约ln n个整数。由于每个偶数会被立刻拒绝,所以实际上只需测试大约0.5ln n个整数。,素性检验,引理
5、: 如果p为大于2的素数,则方程 x2 1(mod p)的解只有x1和x-1。 证明:由x21 mod p,有x2-10 mod p,(x+1)(x-1)0 mod p,因此p|(x+1)或p|(x-1)或 p|(x+1)且p|(x-1)。 若p|(x+1)且p|(x-1),则存在两个整数k和j,使得x+1=kp,x-1=jp,两式相减得2=(k-j)p,为不可能结果。所以有p|(x+1)或p|(x-1)。 设p|(x+1),则x+1=kp,因此x-1(mod p)。类似地可得 x1(mod p)。(证毕) 引理的逆否命题为:如果方程x21 mod p有一解x0不为 -1,1中的元素,那么p不
6、为素数。 例如: 考虑方程x21(mod 8),由Z8上模乘法的结果得 121 mod 8, 321 mod 8, 521 mod 8, 721mod 8又5-3 mod 8,7-1 mod 8,所以方程的解为1,-1,3,-3,可见8不是素数。,素性检验,素性检验,目前还没有一个高效的办法,实际中应用最多Miller- Rabin算法,中国剩余定理(CRT),中国剩余定理(CRT),.,.,.,中国剩余定理(CRT),.,中国剩余定理(CRT),.,中国剩余定理(CRT),.,中国剩余定理(CRT),中国剩余定理(CRT),中国剩余定理(CRT),离散对数,求模下的整数幂,离散对数,离散对数
7、,.,.,离散对数,离散对数,离散对数,离散对数,离散对数,目前已知的最快的求离散对数算法其时间复杂度为:,所以当 p 很大时,该算法也是不可行的。,计算上的安全性安全性的理论基础:复杂性理论算法是求解某个问题的一系列具体步骤,通常可理解为求解某个问题的通用计算机程序。问题是需要回答的一般性提问,通常含有若干个未定参数或自由变量。问题的描述包括给定所有的未定参数的一般性描述陈述“答案”或“解”必须满足的性质一个算法的复杂性由该算法所需求的最大时间(T)和存储空间(S)度量。由于算法用于同一问题的不同规模实例所需求的时间和空间往往不同,所以总是将他们表示成问题实例的规模n的函数,n表示描述该实例所需的输入数据长度。,算法复杂性,算法复杂性用“大O”的符号来表示,它表示算法复杂性的数量级。f(n)=O(g(n)意味着存在常数c和n0,使得对一切nn0,有f(n)c|g(n)|。通常按时间(或空间)复杂性对算法进行分类。一个输入的大小为n的算法被称为是:线性的: 如果运行时间是O(n)多项式的:如果运行时间是O(nt),其中t是一个常数指数的: 如果运行时间是O(th(n),其中t是一个常数,h(n)是 一个多项式一般地,一个可以在多项式时间内解决的问题被认为是可解的,而任何比多项式时间更长的时间,尤其是指数时间,被认为是不可解的。,