快速幂
快速幂: 快速幂 顾名思义,就是快速算某个数的多少次幂。其时间复杂度为O(log₂N),与朴素的O(N)相比效率有了极大的提高。 求a的n次方,普通情况是这样的: int ans=1; for(i=1;i<=n;i++) ans*=a; 可以知道时间复杂度为 O(n) 。 而 快速幂 ,举一个例子吧,不多半页或一页的定义,直接给出例子,应该更好理解一点。 比如: 求a的11次方:(快速幂) 11可以写成二进制(1011),即2的11次方==2的1011(二进制表示)次方。 而2的1次方乘以本身等于2的2次方(我们暂时将2的1次方记为一阶) 2的2次方乘以本身等于2的4次方(我们暂时将2的2次方记为二阶) 2的4次方乘以本身等于2的8次方(我们暂时将2的4次方记为三阶) 那么我们可以知道:2的11次方=2的1次方×2的2次方×2的8次方 也就是ans=一阶×二阶×四阶(这个时候对比11的二进制1011) 可以发现刚好从右往左,是第一位,第二位,第四位是1。 快速幂求a的n次方对m取模: # include <stdlib.h> # include <stdio.h> # include <algorithm> # include <iostream> # include <string.h> # include <math.h> using namespace std ; int