乘法逆元

(a+b)%p=(a%p+b%p) %p

(a-b)%p=(a%p-b%p) %p

(a*b)%p=(a%p*b%p) %p

如果有ab≡1(mod p)ab≡1(mod p),则称b是mod p意义下a的乘法逆元。记b=inv(a)b=a^{-1}(定义了剩余系中的除法)

求逆元的方法:

1.扩展欧几里得

ax≡1(modp)可以等价的转化为ax−py=1
然后套用exgcd解方程,并检查gcd(a,p)是否等于1 
如果gcd(a,p)=1,把x调整到1~p−1即可 
时间复杂度O(log n)

2.费马小定理

a^{p-1}\equiv 1(mod p)a*a^{p-2}\equiv 1

模数是一个质数的时候,inv(i)=i^{p-2}(mod p)

3.

a\varphi (p)\equiv 1(mod p)a\varphi (p)-1是a的逆元 

适用于模数不是素数 

代码:

long long inv1(LL a,LL mod)//扩展欧几里得求逆元 
{
    LL x,y;
    LL d=exgcd(a,mod,x,y);
    if(d==1) return (x%mod+mod)%mod;
    return -1;
}

long long inv2(LL a,LL mod)//费马小定理
{
    return ksm(a,mod-2,mod);
} 

 

你可能感兴趣的:(技术,算法,技术)