将幂的运算转换为二进制的运算,类似于进制转换思想,将二进制转换为十进制。
如次数为10,二进制表示是1010,每次将数右移一位,同时将底数自乘,即每次将底数的次数乘2,只要遇到尾数为1时,将结果乘上底数(这里指自乘后的底数),即可完成幂运算。
long long quick_power(long long base,long long power)
{
long long result=1;
//将power看成二进制形式
while(power)
{
//相当于将二进制转化为十进制一样
//末尾有1就加上相应的数,因为两数相乘指数相加,因此用乘法运算
//每移动一次就将结果乘2
if(power&1)
{
result*=base;
}
power>>=1;
//base表示2^n
base*=base;
}
return result;
}
如果要求结果保留n位,只要每次对底数和结果取模即可。
//对结果取模的运算
long long quick_power(long long base,long long power,long long mod)
{
long long result=1;
base%=mod;
//将power看成二进制形式
while(power)
{
//相当于将二进制转化为十进制一样
//末尾有1就加上相应的数,因为两数相乘指数相加,因此用乘法运算
//每移动一次就将结果乘2
if(power&1)
{
result=(result*base)%mod;
}
power>>=1;
//base表示2^n
base=(base*base)%mod;
}
return result;
}
该博客介绍了快速幂运算的原理,通过将指数表示为二进制来高效计算大整数的幂。在不使用循环的情况下,通过位操作和自乘优化计算过程,大大减少了计算时间。此外,还讨论了如何在计算过程中加入取模操作,以满足在模数限制下的幂运算需求。这种方法在处理大规模数学运算和算法竞赛中非常有用。

被折叠的 条评论
为什么被折叠?



