位运算求快速幂
1.一般求幂
int pow1(int a,int b){
int r=1;
while(b--) r*=a;
return r;
}
2.快速求幂
int pow2(int a,int b){
int r=1,base=a;
while(b!=0){
if(b%2) r*=base;
base*=base;
b/=2;
}
return r;
}
3.递归快速求幂
int f(int m,int n){ //m^n
if(n==1) return m;
int temp=f(m,n/2);
return (n%2==0 ? 1 : m)*temp*temp;
}
4.位运算 最常用
int pow4(int a,int b){
int r=1,base=a;
while(b){
if(b&1) r*=base;
base*=base;
b>>=1;
}
return r;
}
快速幂:
主要算法:
typedef long long ll;
//a^b mod p
ll quick(ll a,ll b,ll c)
{
ll ans=1%c; //记录结果 当B为0且C等于a时ans为0
a=a%c; //预处理,使得a处于c的数据范围之下
while(b!=0)
{
if(b&1) ans=(ans*a)%c; //如果b的二进制位不是0,那么我们的结果是要参与运算的
b>>=1; //二进制的移位操作,相当于每次除以2,用二进制看,就是我们不断的遍历b的二进制位
a=(a*a)%c; //不断的加倍
}
r
位运算+快速幂
最新推荐文章于 2022-01-19 21:40:02 发布
本文探讨了位运算在快速幂算法中的应用,详细解释了快速幂算法的原理及实现,包括快速幂取模的过程。同时,文章指出可能存在一些细节问题,欢迎读者指正。
摘要由CSDN通过智能技术生成