则 ab 可以表示成下面的形式
ab = ab0 * ab1 * 21 * ··· * abn * 2n
=> 令 ai = abi * 2i
=> 则:ab = a0 * a1 * ··· * an
运用上面提到的关于幂运算的性质 -> (a · b) mod c = [ (a mod c) · (b mod c) ] mod c
则 ab % c = ( (a0 % c) * (a1 % c) * ··· * (an % c ) ) % c
算法实现
int quickMod(int a, int b, int c){
int ans = 1;
a = a % c; //所有项里面都有a,提取出来可统一先取模一下,减少计算量, 也可不加while(b != 0){
if(b & 1)
ans = (ans * a) % c;
b >>= 1;
a = (a * a) % c;
}
return ans;
}