欧拉定理(数论定理)在 模幂运算中的应用

2019-04-13 12:51发布

< 前言 >  

在很多情况下,我们经常会遇到很大的数a和b,求a的b 次幂中的某位数是什么,对于运算,用暴力求解往往会溢出,并且非常麻烦。 而 利用模运算性质和 欧拉定理中的数论定理,则可方便求解
首先,欧拉定理(数论定理) 内容  

欧拉定理(数论定理) 内容

数论中,欧拉定理,(也称费马-欧拉定理)是一个关于同余的性质。欧拉定理表明,若n,a为正整数,且n,a互质,则:                                                                       注: mod为模运算符,在某些地方可表为% 具体证明见 https://baike.baidu.com/item/%E6%AC%A7%E6%8B%89%E5%AE%9A%E7%90%86/891345?fr=aladdin#2_2    

具体用法

例如,我们想知道3333^5555的末位是什么。很明显不可能直接把3333^5555的结果计算出来,那样太大了。但我们想要确定的是3333^5555(%10),所以问题就简化了。 根据  模运算规则 a^b % p = ((a % p)^b) % p ,我们知道3333^5555(%10)= 3^5555(%10)。 根据 模运算规则 (a * b) % p = (a % p * b % p) % p ,由于5555 = 4 * 1388 + 3,我们得到 3^5555(%10) =(3^(4*1388) * 3^3)(%10) =((3^(4*1388)(%10)* 3^3(%10))(%10) =((3^(4*1388)(%10)* 7)(%10)。   化到此处即可使用 欧拉定理 对于3^(4*1388)而言,  Φ(n) = 4*1388,即n = 4; 同时 满足 3和4互质, 所以 3^(4*1388)=1%4=1;   即 根据欧拉定理可以得到 3 ^ (4 * k) % 10 = 1, 所以((3^(4*1388)(%10)* 7)(%10)= (1 * 7) (% 10) = 7 计算完毕。