求X^M,如果M的值很大的时候,比如M=10^9,的时候,o(n)的复杂度已经不能满足要求,所以这时候要找一种更快速的求幂运算的算法,快速二分幂,o(logn)值得你拥有。
我们将M用二进制来表示可以表示为,M=2^0+2^1+2^2+……;
此时x^m=x^(=2^0+2^1+2^2+……)=x^1*x^2*x^4……
可以看见每一项的x都是前面一项的2倍,而且乘法项数是用二进制转换既是将数进行二进制转换达到降低复杂度的运算.’
#include<stdio.h>
long long quick(long long x,long long m)//快速二分幂 x^m
{
long long ans=1;
while(m>0)
{
if(m%2==1)
ans*=x;
x=x*x;
m=m/2;
}
return ans;
}
int main()
{
long long x,m;
while(scanf("%lld%lld",&x,&m)!=EOF)
{
printf("%lld\n",quick(x,m));
}
return 0;
}