快速幂

来源:互联网 发布:淘宝店铺出售平台 编辑:程序博客网 时间:2024/05/18 13:24

计算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);    }};



0 0