算法竞赛进阶指南 0x00

0101a^b

快速幂模板,写一下快速幂的原理。

我们知道,一个数\(n\)在二进制(也可以是其他进制)下可以被表示为\(a_1+a_2*2^1+a_3*2^2+...+a_m*2^{m-1}\)。那么我们可以考虑将其分拆成二进制状态下的每一位,然后做幂运算。这样做的时间复杂度为\(O(log_2 n)\)

实现的过程类似于倒过来的分治(当然也可以直接分治实现),原理基于以下的式子。

对于k为偶数,\(n^k=(n^2)^(k/2)\)

猜你喜欢

转载自www.cnblogs.com/ilverene/p/11142206.html