逆元的几种求法

1.扩展gcd

ax≡1(mod m) , ax+my=1, 调用一次扩展gcd就可以求出x。

2.费马小定理

如果gcd(a,p)= 1, 那么a^(p-1) ≡ 1(mod p)

也就是a^(p-2)*a ≡ 1(mod)p, a^(p-2)就是a的逆元,调用快速幂算出a^(p-2)即可

3.欧拉定理

f(x):[1-x-1]内与x互素的数的个数, a^f(p) ≡ 1(mod p) (仍然要求a,p互素), a的逆元为a^(f(p)-1)

4.线性递推

求1-x对p的逆元。1的逆元是1, 对于i, 设p = ki+r (r<i), 显然ki+r ≡ 0(mod p).两边同乘i^-1 * r^-1

kr^-1 + i^-1 ≡ 0(mod p), i^-1 = -k*r^-1, i^-1 ≡ -(p/i)*(p%i)^-1 (mod p)

void inverse(){
    memset(inv,0,sizeof(inv));
    inv[1]=1;
    for (int i = 2;i <= maxn; i++){
        inv[i] = inv[mod%i]*(mod-mod/i)%mod;
    }
}

 

可惜前几天组队赛时一种方法也不会

 

posted @ 2017-08-22 18:48  DearDongchen  阅读(487)  评论(0编辑  收藏  举报