LintCode:140.快速幂

题目:


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

猜你喜欢

转载自blog.csdn.net/qq_27139155/article/details/79861291