快速幂

计算an % b其中a,b和n都是32位的整数。

样例

例如 231 % 3 = 2

例如 1001000 % 1000 = 0

挑战

O(logn)

********************************************************

a^n % b

1.如果n 为奇数可以转化为 (a^(n/2) * a^(n/2) *  a ) %b = ((a^(n/2)%b * a^(n/2)%b)%b * a%b) %b

2. 如果n 为偶数可以转化为   (a^(n/2) * a^(n/2) ) %b = (a^(n/2)%b * a^(n/2)%b)%b 

class Solution {
    /*
     * @param a, b, n: 32bit integers
     * @return: An integer
     */
    public int fastPower(int a, int b, int n) {
        // write your code here
       if(n == 0)
			return 1 % b;
		if(n== 1)
			return a % b;
		long temp = fastPower(a, b, n/2);
		if((n & 1) == 1)
			return (int) (((temp * temp)%b)*a%b);
		else 
			return (int) (temp*temp%b);
    }
};



你可能感兴趣的:(面试,lintcode,数字与二进制)