1、求
% m
typedef long long ll;
ll pow(ll a,ll b,ll m)
{
ll ans=1;
for(int i=0;i<b;i++)
{
ans=ans*a%m;
}
return ans;
}
2、快速幂求
% m(递归写法)
typedef long long ll;
ll pow(ll a,ll b,ll m)
{
if(b==0) return 1;
if(b%2==0)
{
ll mul=pow(a,b/2,m);
return mul*mul%m;
}
else
{
return a*pow(a,b-1,m)%m;
}
}
3、快速幂求
% m(迭代写法)
b化二进制
算法笔记 P136
//迭代写法
typedef long long ll;
ll pow(ll a,ll b,ll m)
{
ll ans=1;
while(b>0)
{
if(b&1)
{
ans=ans*a%m;
}
a=a*a%m; //别忘记取模!!!!!!
b>>=1; //b右移一位
}
return ans;
}
注:实际应用中,迭代写法与递归写法在效率上差别不大。

本文详细介绍了求解快速幂运算的三种方法:普通循环、递归和迭代写法。通过具体的C++代码示例,讲解了每种方法的实现细节及注意事项,如在迭代写法中使用二进制化b进行优化,以及在每一步计算中及时取模以避免溢出。
145

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



