简单说就是通过二进制来进行位运算,时间复杂度为O(log₂N),与朴素的O(N)相比效率有了极大的提高。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std;
int m,n;
long long pw(long long a,long long b)
{
long long res=1;
while(b)
{
if(b&1)
res*=a;
a*=a;
b>>=1;
}
return res;
}
int main()
{
while(scanf("%lld%lld",&m,&n))
{
printf("%lld\n",pw(m,n));
}
return 0;
}