分治法。
- a%b == (a%b)%b;
- ans、a要用long long 来保存,不然会溢出;
- 应该用分治法来解决问题,如果n为奇数,就计算一次ans,然后n减半,aa倍增;
- 直到n==0,结束循环
C++代码:
class Solution {
public:
/*
* @param a, b, n: 32bit integers
* @return: An integer
*/
int fastPower(int a, int b, int n) {
if (n==0) {
return 1%b;
}
long long ans = 1;
long long aa = a;
while(n>0) {
if (n%2 == 1) {
ans = (ans * aa) %b;
}
n = n/2;
aa = (aa*aa) % b;
}
return ans%b;
}
};