逆元的推理以及应用

当求解公式:(a/b)%m 时,因a,b可能会过大,会出现爆精度的情况,所以需变除法为乘法
逆元
当求解公式:(a/b)%m 时,因b可能会过大,会出现爆精度的情况,所以需变除法为乘法:
设c是b的逆元,则有bc≡1(mod m);
则(a/b)%m = (a/b)1%m = (a/b)bc%m = ac(mod m);
即a/b的模等于a
b的逆元的模;

使用方法(采用扩展欧几里得exgcd):

ll extend_gcd(ll a, ll b, ll &x, ll &y) {
     
    if (b == 0) {
     
        x = 1, y = 0;
        return a;
    }
    else {
     
        ll r = extend_gcd(b, a % b, y, x);
        y -= x * (a / b);
        return r;
    }
}
ll inv(ll a, ll n) {
     
    ll x, y;
    extend_gcd(a, n, x, y);
    x = (x % n + n) % n;
    return x;
}

参考:参考资料

你可能感兴趣的:(算法学习,算法)