上次的博客中,我们会发现一个问题:
同余不满足同除性,即不满足 若存在( a equiv b (mod P) )时,有( a/c equiv b (mod P) )
那么,对于除法的取模,难道只能算出最终结果之后取模了吗?
不,珂学家们早就有了办法,那就是乘法逆元;
乘法逆元——定义为存在一个数 ( x ) ,使 ( ax equiv 1 (mod P) )
定义非常简单,不过就是把同余系下的除法转换为了乘法运算,这样就可以方便的进行取模了
那么问题来了,我们要怎么计算出这个逆元呢?
扩展欧几里得算法求乘法逆元
还记得我们曾经提过的扩展欧几里得算法吗?
扩展欧几里得算法也可以用来解决求解逆元的问题啦QwQ
对于一个同余方程 ( ax equiv 1 (mod P) ),我们能够将其转化为一个线性不定方程 ( ax+Py = 1 )显然可得
该方程有整数解的条件是( gcd(a,P) = 1 )
那么我们用扩展欧几里得算法求解这个线性不定方程,得出解之后,再把x转化为最小正整数解,就成功的求出了( a )的乘法逆元了
费马小定理求解乘法逆元
著名的数学家费马同志也有一个强大的定理来帮助我们解决求乘法逆元的问题
它就是费马小定理
先来了解一下费马小定理的结论
当P是质数,且a不是p的倍数时,有以下定理:
( a^{P-1} equiv 1 (mod P) )
我们要求的是一个满足 ( ax equiv 1 (mod P) )的( x ),结合费马小定理,相信作为一个小机灵鬼的你已经发现了
要求的乘法逆元 ( x ) 实际上,就是 ( a^{P-2} (mod P) ),结合快速幂取模的知识,我们就可以快速求出a的乘法逆元啦
附加:如何证明费马小定理?
首先我们需要了解一个关于素数的重要定理——威尔逊定理
若( P ) 为素数,则有 ( (P-1)! equiv 1 (mod P) )
而且威尔逊定理的逆定理同样成立:
即,若有 ( (P-1)! equiv 1 (mod P) ),则有 ( P )为素数也一定成立
乍一看似乎与费马小定理没什么太大的关系,但是我们有如下的推导过程:
首先,有( P-1 )个整数,分别是 ( a , 2a , 3a , cdots , (P-1)a )都不是P的倍数
其次,这( P-1 )个整数中,没有任何两个整数是在模P下同余的
所以,这( P-1 )个整数中,对模P的结果既不为( 0 ),又不存在两个数同余,因此,这( P-1 )个数模P后的结果一定是( 1 , 2 , 3 , cdots , p-1 )的某一种排列
因为同余满足同乘性,所以我们可以得到:
( a * 2a * 3a * cdots *(P-1)a equiv 1*2*3* cdots *(P-1) (mod P) )
可以得到:
( a^{P-1}*(P-1)! equiv (P-1)! (mod P) )
由威尔逊定理,我们可以得到,由于( P )为素数,所以( (P-1)! )与( P )互质,所以可约去 ( (P-1)! )
得到 ( a^{P-1} equiv 1 (mod P) )
证毕
递推求逆元的方式
首先,我们有( 1^{-1} equiv 1 (mod P) )
其次,设( p=k*i+r , r<i , 1<i<p ),在模( P )下可得:
( k*i+r equiv 0 (mod P) )
再在两侧同时乘(i^{-1} , r^{-1} ,可得:
(k*r^{-1}+i^{-1} equiv 0 (mod P) )
(i^{-1} equiv -k*r^{-1} (mod P) )
(i^{-1} equiv -left [ frac{P}{i} ight ] * (P mod i)^{-1} (mod P) )
由此,我们就可以以递推的方式求出逆元啦
放代码!
A[i]=(MOD-MOD/i)*A[MOD%i]%MOD
如果将公式改为递归的形式,我们也可以递归的求出单个数的逆元
通过欧拉定理求解乘法逆元
这个定理qwq,我也不会证明咕咕咕
简单的放出结论吧
欧拉定理
若( a ) 与 ( m )互质,则有 ( a^{phi(m)} equiv 1 (mod m) )
扩展欧拉定理
( a^{x} equiv a^{x mod phi(m) + phi(m)} (mod m) )
欧拉定理的作用
1.求乘法逆元
2.取模时降幂,即
若( a ),( n )互质,则( a^{k} equiv a^{k mod phi(n)} (mod n) )
就是酱紫啦qwq