快速幂
快速幂顾名思义,就是计算某个数的n次幂
时间复杂度为O(log n) 比常规的O(n)的算法速度有极大的提高。
下面放上代码
LEVEL1
使用二分对幂运算进行处理
long long fastPower(long long base,long long power)
{
if (power == 1ll)
return base;
else
{
if (power % 2 == 0)
{
return fastPower(base, power / 2) * fastPower(base, power / 2);
}
else
{
return fastPower(base, power / 2) * fastPower(base, power / 2) * base;
}
}
}
LEVEL2
递归算法确实有点屎了,
数据大了貌似很容易爆栈;
放下优化代码(使用递推)
long long fastPower(long long base,long long power)
{
long long result = 1;
while (power)
{
if (power % 2 == 1)
result = result * base;
power /= 2;
base = base * base;
}
return result;
}
LEVEL3
没错代码还可以使用位运算进行优化
放上终极代码
long long fastPower(long long base,long long power)
{
long long result = 1;
while (power)
{
if (power & 1)
result = result * base;
power >>= 1;
base = base * base;
}
return result;
}
我们可以测试一下该代码的效率,简直恐怖!!!
可能这就是算法的魅力吧!!!