码迷,mamicode.com
首页 > 其他好文 > 详细

逆元板子

时间:2019-10-01 20:33:58      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:mod   code   开始   杨辉三角   ++i   质数   ret   mes   pow   

逆元板子

杨辉三角

杨辉三角第\(i\)行第\(j\)列(\(i\)从0开始)即为\(C_i^j\)

for(int i=0;i<=n;++i){
    C[i][0]=1;
    for(int j=1;j<=i;++j)
        C[i][j]=(C[i-1][j]+C[i-1][j-1])%MOD;
}

快速幂逆元

由费马小定理得\(a\times a^{p-2}\equiv 1(mod\;p)\)(其中\(a,p\)互质且\(p\)为质数),故除\(a\)等价于乘以\(a^{p-2}\),使用快速幂求出\(a^{p-2}\)即可

LL pow_mod(LL a, LL b, LL mo){
    LL ret = 1;
    while(b){
        if(b & 1) ret = (ret * a) % mo;
        a = (a * a) % mo;
        b >>= 1;
    }
    return ret;
}

线性逆元

inv[1]=1;
for(int i=2;i<=n;++i){
    inv[i]=-(p/i)*inv[p%i];
    inv[i]=(inv[i]%p+p)%p;
}

拓展欧几里得

不同于以费马小定理为原理的快速幂,拓展欧几里得中\(p\)不需要一定为质数

void Exgcd(ll a, ll b, ll &x, ll &y) {
    if (!b) x = 1, y = 0;
    else Exgcd(b, a % b, y, x), y -= a / b * x;
}
int main() {
    ll x, y;
    Exgcd (a, p, x, y);
    x = (x % p + p) % p;
    printf ("%d\n", x); //x是a在mod p下的逆元
}

逆元板子

标签:mod   code   开始   杨辉三角   ++i   质数   ret   mes   pow   

原文地址:https://www.cnblogs.com/santiego/p/11615954.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!