计算an % b,其中a,b和n都是32位的整数。
样例
例如 231 %3 = 2
例如 1001000 %1000 = 0
挑战
O(logn)
=======================================================================
注意到 a2 % b =((a%b)*(a%b)) % b
故猜想到 an % b = ((an/2%b)*(an/2%b)) % b
这样只需计算 an/2 % b,再将结果平方即可。这样也就实现了O(logn)
public int fastPower(int a, int b, int n) {
if (n == 1) return a % b;
if (n == 0) return 1 % b;
long product = fastPower(a, b, n / 2);
product = (product * product) % b;
if (n % 2== 1) { //n为奇数的情况
product = (product * a) % b;
}
return (int) product;
}