逆元总结

逆元是一个很有用的东西,还记得上半年不会逆元丢了许多许多分,最近算是恶补了一下,许多题都能AC了.

它的作用是处理膜意义下的除法运算,因为膜的时候对除数取余是错误的,这个时候就要用到逆元.

一.log2(mod)求mod为质数时任何数 的逆元

long long mul(long long x,long long y)//快速乘
{
    return ((x*y-(long long)(((long double)x*y+0.5)/mod)*mod)%mod+mod)%mod;
}
    
long long quick(long long  a,long long  b)
{

    long long ans=1;
    for(;b;b>>=1,a=a*a%mod)//如果mod*mod溢出long long了就用快速乘
        if(b&1)ans=ans*a%mod;
    return ans%mod;
}
long long niyuan(a)
{
    return quick(a,mod-2);
}

二.递推1到n的逆元

    iniyuan[1]=1;
    for(i=2;i<=n;i++)
        iniyuan[i]=(mod-mod/i)*iniyuan[mod%i]%mod;

三.递推!1到!n的逆元(主要用于O(1)处理组合数)

 

    
    iniyuan[1]=niyuan[1]=1;;
    for(i=2;i<=n;i++)
        iniyuan[i]=(mod-mod/i)*iniyuan[mod%i]%mod;
    for( i=2;i<=n;i++)
        niyuan[i]=niyuan[i-1]*iniyuan[i]%mod;

 

posted @ 2018-10-16 19:13  zzuqy  阅读(176)  评论(0编辑  收藏  举报