快速幂
利用倍增的思想,将o(n)的时间复杂度优化成o(lgn)
int ksm(int x,int y,int p) {
int res = 1;
while (y) {
if (y & 1)res = (res * x) % p;
x = (x * x) % p;
y = y >> 1;
}
return res % p;
}
快速幂求逆元
求逆元就是为了把除法转化成乘法,因为乘法可以取模,而除法不行,除***有精度问题,而乘法则不会有这样的问题,要注意,有逆元的情况下是两个数必须要互质(也就是最大公约数为1)
int ksm(int a, int b,int mod) {
int res = 1;
while (b) {
if (b & 1)res = res * a % mod;
a = a * a % mod;
b >>= 1;
}
return res;
}
void solve() {
int n, m;
cin >> n >> m;
cout << ksm(n, m - 2, m) <<endl;
}