在C++编程中,我们常常需要解决类似于a^n之类的问题,
这时候,我们就需要面临一个
严重(说实话,不是很严重)的问题:超时此时,就可以用快速幂q_pow()算法来实现问题。
首先,先了解一下什么是快速幂:
快速幂,即一种利用简单二分算法实现的递归程序,用于实现 a^n 或 a^n%m 等问题。
下面是快速幂的模板:(没有很难,只是用了一个非常非常非常简单的位运算)
1.用if-else语句实现递归操作:
typedef long long LL;
LL q_pow(int a, int n) { //a为底数,n为指数
if (n == 0) //指数为0,直接返回1
return 1;
int tmp = q_pow(a, n >> 1); //二分思想,每次取半
if (n % 2 == 0) //判断奇偶
return tmp * tmp; //如果为奇数,则直接相乘
else
return a * tmp * tmp; //如果为偶数,则相乘后再乘底数
}
2.用三目运算