题目思路:
Calculate the an % b where a, b and n are all 32bit integers.
Example
For 231 % 3 = 2
For 1001000 % 1000 = 0
Challenge
题目思路:
O(logn)
题目要求用O(logn),那么就用二分法呗。每次recursion把n二分再二分。但是要注意到n可能为奇数,如果n为odd,那么n = n / 2 * 2 + 1.
Mycode(AC = 16ms):
class Solution {
public:
/*
* @param a, b, n: 32bit integers
* @return: An integer
*/
int fastPower(int a, int b, int n) {
// write your code here
if (n == 0) {
return 1 % b;
}
else if (n == 1) {
return a % b;
}
else {
// get result of n / 2
long long half_pow = fastPower(a, b, n / 2);
// get possible result of n / 2 * 2
long long tmp = (half_pow * half_pow) % b;
// if n is odd, then result is n / 2 * 2 + 1
if (n % 2 == 1) {
return (tmp * a) % b;
}
else {
return tmp % b;
}
}
}
};