如果第i位为1,即bi=1,则表示该位需要参与模运算,计算结果 result = (result*base) mod m;其中result为前i-1次的计算结果。
int mod(int a,int b,int m){
int result = 1;
int base = a;
while(b>0){
if(b & 1==1){//与1按位与
result = (result*base) % m;
}
base = (base*base) %m;//难点在这
b>>=1;//相当于除2
}
return result;
}把时间复杂度降到了lgb,大大优于方法一。