题目:
思路:每次对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; } }