题目
题解参考
a
=
a
∗
a
a = a*a
a=a∗a这部分是计算
a
2
i
a^{2^i}
a2i,
a
b
=
Π
i
=
0
t
a
n
i
2
i
=
Π
i
=
0
t
(
a
2
i
)
n
i
a^b = \Pi_{i=0}^{t}a^{n_i 2^i} = \Pi_{i=0}^{t}(a^{2^i})^{n_i}
ab=Πi=0tani2i=Πi=0t(a2i)ni ,代码中的b&1是计算
n
i
n_i
ni ,只有
n
i
n_i
ni为1的时候才乘,如果为0,其实乘的是1,所以就不用显示的进行乘。
long long binpow(long long a, long long b, long long m) {
a %= m;
long long res = 1;
while (b > 0) {
if (b & 1) res = res * a % m;
a = a * a % m;
b >>= 1;
}
return res;
}