原理
在计算ab的时候,将b转换为kn*2n+kn-1*2n-1+……+k2*22+k1*21+k0*20(kn,kn-1,……k2,k1,k0取0或1),运用a(m+n)=am·an
所以ab=a(kn*2n+kn-1*2n-1+……+k2*22+k1*21+k0*20)=kna2^n+kn-1a2^n-1+……+k2a2^2+k1a2^1+k0a2^0
例:a13=a(1101)2=a8·a4·a1•
代码
#include<bits/stdc++.h>
using namespace std;
long long a,b;
int main(){
cin>>a>>b;
long long n=a,ans=1;
while(b!=0){
if(b&1==1){//判断b转二进制末尾是否为1
ans=ans*n;
}
n=n*n//n每次平方 由一次方变为平方,再变为四次方,八次方
b=b>>1;
}
cout<<ans;
return 0;
}
注意事项
ans,n均以指数增长,有时取模,有时要用long long或高精度