1.1 概论
快速幂顾名思义,就是快速算某个数的多少次幂。其时间复杂度为O(log₂N),与朴素的O(N)和一般求法的O(N*N)相比效率有了极大的提高。
1.2 原理
把b转换成二进制数。
该二进制数第i位的权为
例如
11的二进制是1011
11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1
因此,我们将a¹¹转化为算
1.3 实现
1.3.1 一般做法
#include <stdio.h>
int pow(int n,int m)
{
int r=1,base=n;
while(m)
{
if(m%2)
{
r=r*base;
}
base=base*base;
m=m/2;
}
return r;
}
int main()
{
int a,b;
scanf("%d%d",&a,&b );
printf("%d",pow(a,b));
return 0;
}
1.3.2 位运算
#include <stdio.h>
int pow(int n,int m)
{
int r=1,base=n;
while(m)
{
if(m&1)
{
r=r*base;
}
base=base*base;
m>>=1;
}
return r;
}
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d",pow(a,b));
return 0;
}