题目
题解参考
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;
}