乘法逆元

前言: 乘法逆元,一般用于将模意义下的除法转换为乘法

求解普通逆元( a x ≡ 1 ( m o d   m ) ax\equiv 1(mod\ m) ax1(mod m))

拓展欧几里得

首先我们看看逆元的定义:若 a x ≡ 1 ( m o d   m ) ax\equiv 1(mod \ m) ax1(mod m),且a与m互质,则 x x x a a a m o d   m mod \ m mod m意义下的乘法逆元,记作 a − 1 a^{-1} a1.

根据这个同余式,我们可以得到 a x + k m = 1 ax+km=1 ax+km=1,且a和m是互质的,那么就满足贝祖等式 a x + b y = g c d ( a , b ) ax+by=gcd(a,b) ax+by=gcd(a,b),可以用拓欧求解.

ll exgcd(ll a,ll b,ll &x,ll &y)//ax+by
{
	if(b==0)
	{
		x=1,y=0;
		return a;
	}
	int ret=exgcd(b,a%b,x,y),t=x;
	x=y,y=t-(a/b)*x;
	return ret;
}

这个板子虽然稍长,但返回值是gcd,用处更广泛

另外,由于gcd求得负数和1最大公约数是-1,exgcd不能用来求解a为负数的情况

快速幂

观察乘法逆元的形式: a x ≡ 1 ( m o d   m ) ax \equiv1(mod \ m) ax1(mod m).

考虑到欧拉定理: a φ ( m ) ≡ 1 ( m o d   m ) a^{\varphi (m)} \equiv 1(mod\ m) aφ(m)1(mod m).

由于洛谷模版题中给出m为质数,则有:
a x ≡ a m − 1 ( m o d   m ) a ≡ a m − 2 ( m o d   m ) ax \equiv a^{m-1}(mod\ m)\\a \equiv a^{m-2}(mod \ m) axam1(mod m)aam2(mod m)
那 么 , a 在 m o d   m 意 义 下 的 乘 法 逆 元 即 为 a m − 2 m o d   m 那么,a在mod \ m意义下的乘法逆元即为a^{m-2} mod \ m ,amod mam2mod m,满足快速幂形式,可使用快速幂求解.

ll fpm(ll x, ll power, ll mod) 
{
    x%=mod;
    ll ans=1;
    for (;power;power>>=1,(x*=x)%=mod)
    	if(power&1)(ans*=x)%=mod;
    return ans;
}

ll inv(ll x)
{
	return fpm(x,mod-2,mod);
}

代码中的(ans*=x)%=mod即为(ans=ans*x)=(ans=ans*x)%mod.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值