快速幂
理解:在我看来快速幂的本质就是通过降低运算次数来达到减少时间复杂度的目的,再直白一点就是分解指数, 快速幂把幂次运算由O(n)的复杂度简化到O(logn)。
原理:
我求幂
int pow1(int a,int b)
{
int r=1;
while(b--) r*=a;
return r;
}
单纯到可爱的幂运算
快速求幂(一般)
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;
}
如果幂是偶数的话就相当于a的n次a的n次(自己自己)并且幂直接div 2(原理是转换成二进制看上文),最终b=1时由r来继承数值;如果是奇数则由r的处理来完成多出来的那次乘法,r一开始便赋值(即为多出来的那次),之后和偶数运算差不多。
快速求幂 (递归)
int f(int m,int n)
{
if(n==1) return m;
int temp=f(m,n/2);
return (n%2==0 ? 1 : m)*temp*temp; //奇偶在此表现出差异
}