问题: 快速求
暴力法(累乘法):
long pow_(int a,int b){
long long result=1;
for(long long i=1;i<=b;++i){
result*=a;
}
return result;
}
算法时间复杂度:O(b),数据越大,消耗时间越多,而且容易超出long long的范围,无法满足太大的运算。
优化算法——快速幂算法:
我们考虑一下怎么实现的:===×9=×9。
我们发现:1.如果指数是偶数,直接将底数平方,指数除以2。
2.如果指数是奇数,底数平方,指数整除2,再乘以底数。
long long Fast_Pow(long long a, long long b) {
long long result = 1;
while (b) {
if (b & 1) { /*位运算可以提升性能,相当于b/%2==1,判断是否为奇数*/
result *= a; /*奇数的二进制最后一位肯定是1*/
}
a *= a; /*此处奇数偶数有相同步骤,合在一起*/
b>>=1; /*位运算,相当于b=b/2*/
}
return result;
}
时间复杂度是:级别,可以看到算法的时间复杂度有了很大提升。