int ans=1;
while(b!=0){
if(b&1)ans*=a;//b的二进制位不为0
b>>=1;//移位操作
a=a*a;//不断加倍
}
printf("%d\n",ans);
第二种方法:
若n是偶数,x^n=(x^2)^(n/2)
若n是奇数,x^n=(x^2)^(n/2)*x
long long mod_pow(int x,int n,int mod){
if(n==0)return 1;
long long res=mod_pow(x*x%mod,n/2,mod);
if(n&1)res=res*x%mod;
return res;
}