快速幂的主要思想就是将指数看做二进制的形式,从低位到高位进行判断,如果这一位是1,那么就要乘上指数的X次方。
例如
3
10
3
101
0
2
1
∗
3
2
∗
3
8
3^{10} \\ 3^{1010_2} \\ 1 * 3^2 * 3^8
3103101021∗32∗38
C++
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;
}
数据比较大时记得开long long
long long ksm(long long a, long long b, long long mod)
{
long long res = 1;
while (b)
{
if (b & 1) res = (res * a) % mod;
a = (a * a) % mod;
b >>= 1;
}
return res % mod;
}