(2) 预处理pn 有时在算法中需要频繁地求an, a 不变, n 会变化, 例如字符串匹配的前缀哈希算法. 此时可以不用快速幂,而是直接将p0到pn全都预处理出来。 下面的代码用了 ull 产生溢出相当于对264取模,也可以在计算过程中手动取模。 代码模板 (C++) // pp[i] := p 的 i 次幂 vector<unsigned long ...
二进制取幂的想法是,我们将取幂的任务按照指数的二进制表示来分割成更小的任务。 首先我们将 因为 有 个二进制位,因此当我们知道了 后,我们只用计算 次乘法就可以计算出 。 于是我们只需要知道一个快速的方法来计算上述 3 的 因此为了计算 ,我们只需要将对应二进制位为 1 的整系数幂乘起来就行了: 将上述过...
从上面的代码我们还能看出,循环枚举的东西其实是 的二进制位,所以这也能从侧面说明时间复杂度是,即的二进制位数。当时,理论上快速幂算法的效率是朴素算法的倍(朴素算法运算次,而朴素算法次左右)。 图片版如下 如果想学习更多算法知识(前缀和与查分、树状数组、单调栈单调队列、并查集、最短路、埃氏筛法、dp等等)可...