逆元
- 【逆元素-百度一下】
广义的来讲,对于任何域中的元素,有乘法运算和单位元,如果对于该域中的元素,存在另一个元素,且满足,那么就是的逆元。
这里我们只讨论在整数域里的逆元,也就是当且,其实这里的逆元,但是我们要在模的意义下讨论它的求法。
在取模意义下,我们只需求出一个数,是的这个数与同余即可,那么这个数就是在取模意义下的逆元。
费马小定理
内容:对于,在模的意义下,有
我们变换一个形式,左右同时除以,就是,那么我们就发现和是同余的,那么就是的逆元了。
费马小定理证明:
- 用欧拉定理直接证明,这个就后面再说。
- 我们用剩余系来看:
引理1:假设为内的一个数,那么可以在模的意义下不重复的取遍的值。
那么我们将乘起来,在模的意义下也就相当于把乘起来,那么可以得到,然后两端同时除以就可以得到了,于是得证。
所以用费马小定理求取逆元的代码如下:
int inv(int a,int b=p-2){
int ans=1;
for(;b;b>>=1,a=(a*a)%p)if(b&1)ans=(ans*a)%p;
return ans%p;
}
欧拉定理
内容:对于,在模(为任意与互质的数)意义下,有,其中为欧拉函数,表示中与互质的个数。
那么我们知道,当为质数时就有,那么这个就是费马小定理了。
我们同样进行变形,可以得到,那么这里就为的逆元了。
我们看,这里只要求互质,并没有要求为质数,所以欧拉定理求逆元比费马小定理求逆元应用更加广泛。
其他应用:当快速幂取模时,指数较大,但我们发现,所以我们可以将指数模了,相当于除以很多个,然后再来快速幂。
欧拉定理的证明:
我们先令为的简化剩余系,再令,其中
引理1. 之间两两在模的意义下不同余,同样也是。
- 证明引理1. :
假设有,那么,我们将其变形得,也就是,由于,所以只有在为的倍数时,这个式子才满足,而,那么它们相减就更加不可能为的倍数了,所以假设不成立,得证。
引理2. 每个模的结果都与互质。
- 证明引理2. :
假设
那么变形就有,也就是,我们可以得知肯定与互质(因为分别与互质),那么我们令,那么变形可知,也就是,那么肯定有因子,那么它与就不互质了,所以假设不成立,得证。
- 证明欧拉定理:
由1,2引理可得,
所以变形得,两端同除就得
扩展欧拉定理
内容:
扩展欧几里得算法
内容 : exgcd(a,b,x,y)
这个也就是求方程的解。
那么我们将看作方程,那么当的时候,这个肯定有解,所以我们用扩展欧几里得定理求出,那么可以发现的,所以此时的就是在意义下的逆元。
线性递推求法
首先我们知道的逆元一定为,所以考虑的逆元()。
对于模数为,我们令,那么对于则有:
那么原式可以写成
两边同时乘以可得
那么,所以将带回即有:
由于以内的逆元已经求出,所以递推即可。
所以