题目:
思路:每次对n/2,减少一半的计算量,直至n=0或n=1;每次返回余数,平方再求余。注意n是奇数偶数,如果是奇数,要补回舍去的1次幂,即乘以a%b,再求余。
取模运算乘法法则:
(a * b) % p = (a % p * b % p) % p
使用递归:
public class Solution {
/**
* @param a: A 32bit integer
* @param b: A 32bit integer
* @param n: A 32bit integer
* @return: An integer
*/
public 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 if(n<0){
return -1;
}
long reminder=fastPower(a,b,n/2);
reminder=(reminder*reminder) %b;
if(n%2==1){
reminder=(reminder*(a%b)) %b;
}
return (int)reminder;
}
}