快速幂 快速幂取模 备忘
快速幂:
int qpow(int a, int b)//注意:b>=0 !!!
{
int base=a,r=1;
while(b)
{
if(b&1)r *= base;
base *= base;
b=b>>1;
}
return r;
}
base为何可以这样取值,原因如下:
快速幂取模:
int qpow_mod(int a, int b, int c)//求 a^b mod c 注意 b>=0 c>0
{
int base = a%c,r=1;
while(b)
{
if(b&1)r= (r*base)%c;
base = (base*base)%c;
b=b>>1;
}
return r;
}
快速幂递归(此方法来自leetcode50号题官方题解)
double helper(double x, long ns){
if(ns==0)
return 1.0;
if(ns==1)
return x;
double t=helper(x,ns>>1);
if(ns&1) return t*t*x;
else return t*t;
}