• 乘法逆元的一些求法


    逆元

    广义的来讲,对于任何域中的元素,有乘法运算和单位元II,如果对于该域中的元素AA,存在另一个元素AA',且满足A×A=IA imes A'=I,那么AA'就是AA的逆元。

    这里我们只讨论在整数域里的逆元,也就是当AZAin m ZI=1I=1,其实这里的逆元A=1AA'=frac{1}{A},但是我们要在模的意义下讨论它的求法。


    在取模意义下,我们只需求出一个数invinv,是的这个数与1Afrac{1}{A}同余即可,那么这个数invinv就是AA在取模意义下的逆元。

    费马小定理

    内容:对于xx,在模p,pP质数p,pin mathbb{P} ext{质数}的意义下,有xp11(mod p)x^{p-1}equiv 1(mod p)

    我们变换一个形式,左右同时除以xx,就是xp21x(mod p)x^{p-2}equiv frac{1}{x}(mod p),那么我们就发现xp2x^{p-2}1xfrac{1}{x}是同余的,那么xp2x^{p-2}就是xx的逆元了。

    费马小定理证明:

    1. 用欧拉定理直接证明,这个就后面再说。
    2. 我们用剩余系来看:

    引理1:假设aa1p11sim p-1内的一个数,那么a,2a,3a, ,(p1)aa,2a,3a,cdots,(p-1)a可以在模pp的意义下不重复的取遍1p11sim p-1的值。引理1的证明-这里面有

    那么我们将a,2a, ,(p1)aa,2a,cdots,(p-1)a乘起来,在模pp的意义下也就相当于把1,2, ,(p1)1,2,cdots,(p-1)乘起来,那么可以得到ap1(p1)!(p1)!(mod p)a^{p-1}(p-1)!equiv (p-1)!(mod p),然后两端同时除以(p1)!(p-1)!就可以得到ap11(mod p)a^{p-1}equiv 1(mod p)了,于是得证。

    所以用费马小定理求取逆元的代码如下:

    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;
    }
    

    欧拉定理

    内容:对于xx,在模pppp为任意与xx互质的数)意义下,有xφ(p)1(mod p)x^{varphi(p)}equiv 1(mod p),其中φ(p)varphi(p)为欧拉函数,表示1p11sim p-1中与pp互质的个数。

    那么我们知道,当pp为质数时就有φ(p)=p1varphi(p)=p-1,那么这个就是费马小定理了。

    我们同样进行变形,可以得到xφ(p)11x(mod p)x^{varphi(p)-1}equiv frac{1}{x}(mod p),那么这里xφ(p)1x^{varphi(p)-1}就为xx的逆元了。

    我们看,这里只要求x,px,p互质,并没有要求pp为质数,所以欧拉定理求逆元比费马小定理求逆元应用更加广泛。

    其他应用:当快速幂取模时,指数较大,但我们发现xφ(p)1(mod p)x^{varphi(p)}equiv 1(mod p),所以我们可以将指数模了φ(p)varphi(p),相当于除以很多个11,然后再来快速幂。

    欧拉定理的证明:

    我们先令x1xφ(p)x_1sim x_{varphi(p)}pp的简化剩余系,再令pi=xxip_i=xx_i,其中gcd(xi,p)=1gcd(x_i,p)=1

    引理1. pip_i之间两两在模pp的意义下不同余,同样xix_i也是。

    • 证明引理1. :

    假设有pipj(mod p)p_iequiv p_j(mod p),那么pipj0(mod p)p_i-p_jequiv 0(mod p),我们将其变形得xxixxj0(mod p)xx_i-xx_jequiv 0(mod p),也就是x(xixj)0(mod p)x(x_i-x_j)equiv 0(mod p),由于gcd(x,p)=1gcd(x,p)=1,所以只有在xixjx_i-x_jpp的倍数时,这个式子才满足,而xi,xjpx_i,x_jleq p,那么它们相减就更加不可能为pp的倍数了,所以假设不成立,得证。

    引理2. 每个pip_ipp的结果都与pp互质。

    • 证明引理2. :

    假设pir(mod p),gcd(p,r)>1p_iequiv r(mod p),gcd(p,r)>1
    那么变形就有xxi=kp+rxx_i=kp+r,也就是xxikp=rxx_i-kp=r,我们可以得知xxixx_i肯定与pp互质(因为x,xix,x_i分别与pp互质),那么我们令d=gcd(p,r)d=gcd(p,r),那么变形可知xxi=r+kpxx_i=r+kp,也就是xxi=d(w1+kw2)其中(dw1=r,dw2=p)xx_i=d(w_1+kw_2) ext{其中}(dw_1=r,dw_2=p),那么xxixx_i肯定有因子dd,那么它与pp就不互质了,所以假设不成立,得证。

    • 证明欧拉定理:

    由1,2引理可得,(xx1×xx2×xxφ(p))(x1×x2×xφ(p))(mod p)(xx_1 imes xx_2cdots imes xx_{varphi(p)})equiv (x_1 imes x_2cdots imes x_{varphi(p)})(mod p)

    所以变形得xφ(p)xixi(mod p)x^{varphi(p)}prod x_iequiv prod x_i(mod p),两端同除就得xφ(p)1(mod p)x^{varphi(p)}equiv 1(mod p)

    扩展欧拉定理

    内容
    xk={xk mod φ(p)gcd(x,p)=1xkk<φ(p)xk mod φ(p)+φ(p)gcd(x,p)1,kφ(p)x ^ { k } = left{ egin{array} { l l } { x ^ { k mod varphi ( p ) } } & { g c d ( x , p ) = 1 } \ { x ^ { k } } & { k < varphi ( p ) } \ { x ^ { k mod varphi ( p ) + varphi ( p ) } } & { g c d ( x , p ) eq 1 , k geq varphi ( p ) } end{array} ight.


    扩展欧几里得算法

    内容 : exgcd(a,b,x,y) 【见详解于这里

    这个也就是求方程ax+by=cax+by=c的解。
    那么我们将ax1(mod y)axequiv 1(mod y)看作方程ax+by=1ax+by=1,那么当gcd(a,b)=1gcd(a,b)=1的时候,这个肯定有解,所以我们用扩展欧几里得定理求出xx,那么可以发现ax1(mod y)axequiv 1(mod y)的,所以此时的xx就是在mod ymod y意义下的逆元。


    线性递推求法

    首先我们知道11的逆元一定为11,所以考虑ii的逆元(i>1i>1)。

    对于模数为pp,我们令p=i×k+d(d<i)p=i imes k+d(d<i),那么对于k,dk,d则有:k=pi,d=p mod ik=lfloorfrac{p}{i} floor,d=p mod i

    那么原式可以写成i×k+d0(mod p)i imes k+dequiv 0(mod p)

    两边同时乘以i1×d1i^{-1} imes d^{-1}可得

    d1×k+ii10(mod p)d^{-1} imes k+i^{i-1}equiv 0(mod p)

    那么i1(k×d1)(mod p)i^{-1}equiv (-k imes d^{-1})(mod p),所以将k,dk,d带回即有:

    i1pi×(p mod i)1(mod p)i^{-1}equiv -lfloorfrac{p}{i} floor imes(p mod i)^{-1}(mod p)

    由于ii以内的逆元已经求出,所以递推即可。

    所以inv(i)=(pi)×inv(p mod i)inv(i)=(-frac{p}{i}) imes inv(p mod i)


    参考大佬文章IN-Luogu

  • 相关阅读:
    ubuntu 下安装memcache 以及php扩展
    js控制页面显示和表单提交
    phpcms--使用添加php原生支持
    phpcms v9 升级视频云问题推荐位不能添加
    phpcms—— 内容中的附件调用和添加远程地址的调用
    phpcms--模型管理,推荐位管理,类别管理
    linux shell 编程
    css中的定位和框模型问题
    php生成静态文件
    打印机问题win7 和xp
  • 原文地址:https://www.cnblogs.com/VictoryCzt/p/10053393.html
Copyright © 2020-2023  润新知