本文主要是介绍快速幂-计算a的b次对m取余,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
题解参考
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;
}
这篇关于快速幂-计算a的b次对m取余的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!