在数论中,如果a和m是正整数,且它们互质,那么a在模m意义下的逆元是一个正整数x,满足ax ≡ 1 (mod m)。也就是说,x是一个整数,满足ax除以m的余数为1。
求解a模m意义下的逆元有多种方法,其中一种常见的方法是使用快速幂算法。以下是使用快速幂算法求解a模m意义下的逆元的示例代码:
int64_t modpow(int64_t a, int64_t b, int64_t m) {
int64_t ans = 1;
a %= m;
while (b > 0) {
if (b & 1) {
ans = ans * a % m;
}
a = a * a % m;
b >>= 1;
}
return ans;
}
int64_t modinv(int64_t a, int64_t m) {
return modpow(a, m - 2, m);
}
其中,modpow
函数使用快速幂算法计算a的b次方模m的结果,modinv
函数使用快速幂算法计算a模m意义下的逆元。这里使用了费马小定理,即a^(p-1) ≡ 1 (mod p)(p是质数),因此可以将逆元计算为a^(m-2)模m的结果。
需要注意的是,在使用快速幂算法计算幂次时,由于指数可能很大,可能会导致数据溢出。因此,在计算过程中,应该对每一步的结果都取模,以保证结果不会溢出。
另外,还需要注意的是,只有当a和m互质时,a模m的逆元才存在。如果a和m不互质,那么a模m的逆元不存在。
标签:算法,逆元,int64,ans,modpow,互质,乘法 From: https://www.cnblogs.com/J-12045/p/17577496.html