一、问题提出
求
二、问题研究
2.1 常规算法
= 3 * 3 * 3 * 3 * 3 * 3 * 3 * 3 * 3 * 3 * 3 * 3 * 3
需要算14次,太麻烦,不符合程序员的逼格
2.2 快速幂
= = 1 * + 1 * + 0 * + 1 *
=
= * *
需要算7次,方便运算
推导过程
=
=
=
=
快速幂就是运算过程不断对底数进行平方运算,并当指数的二进制某位为 1 时,保存当前底数的值
2.3 代码实现
代码实现
typedef long long ll;
//a为底数,b为指数
ll fastPower(int a,int b) {
if(b==0) {
return 1;
}
//res用来保存结果
ll res = 1;
while(b) {
//指数当前位为1时,保存底数的值
if(b&1) {
res*=a;
}
//判断指数的下一位
b>>=1;
//底数做平方运算
a*=a;
}
return res;
}
运行结果:
b&1 表示b与1进行按位与操作,若b当前二进制位为1则结果为1;同时若b为奇数时,该操作结果也为1
>> 表示位移运算