求逆元的四个方法

本文介绍了求解模运算下乘法逆元的四种方法,包括扩展欧几里得算法、费马小定理、线性递推和递推求阶乘逆元,特别适用于模数为质数的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

乘法逆元
a∗x ≡ 1 (mod p)
① 扩展欧几里得:(除了扩展欧几里得,其他三个只适用于p为质数)

ll exgcd(ll a, ll b, ll &x, ll &y){
        if(b == 0){
            x = 1; y = 0;
            return a;
        }
        ll gcd = exgcd(b, a%b, y, x);
        y -= a/b*x;
        return gcd;
    }

② 费马小定理:若a,互质x = a^(p-2)用快速幂即可

int quickpow(int a, int n, int mod){
    ll res = a%mod, sum = 1;
    whiel(n){
        if(n&1) sum = (sum*res)%mod;
        res = (res*res)%mod;
        n/=2;
    }
    return sum;
}

③ 线性递推(从前往后)
给定n,p求1~n中所有整数在模p意义下的乘法逆元。(n < p)
ax≡1(mod p) 即求a=1~n时逆元x

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

④ 递推求阶乘逆元(倒着推)
扩欧求一下invers[n]

for(int i = n-1; i >= 0; i--)  invers[i] = (invers[i+1] * (i+1))%mod;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值