乘法逆元计算方法1:根据费马小定理
条件:mod必须为质数
公式a的乘法逆元x=a^(p-2)%p。
其中时间复杂度为O(logn)
typedef long long ll;
ll quick_pow(ll a, ll b, ll yu)
{
ll ans = 1;
a = a % yu;
while (b)
{
if (b & 1)
ans = ans * a%yu;
a = a * a%yu;
b >>= 1;
}
return ans;
}
ll inv(ll num)
{
return quick_pow(a,mod - 2,mod)
}
乘法逆元计算方法2:利用拓展欧几里得算法
a*x = 1 (mod p)
根据拓展欧几里得算法,可以求出:a*x+y=1(mod p)的x与y,所得的x就是乘法逆元
模板为:
#define ll long long
void ex_gcd(ll a, ll b,ll &x,ll &y,ll &d)
{
if (b==0)
{
d=a,x=1,y=0;
}
else
{
ex_gcd(b,a%b,y,x,d);
y-=x*(a/b);
}
}
ll inv(ll t,ll p)
{
ll d, x, y;
ex_gcd(t,p,x,y,d);
return d ==1?(x%p+p)%p:-1;
}