#140 Fast Power

来源:互联网 发布:js tip 提示框 样式 编辑:程序博客网 时间:2024/04/30 02:39

题目思路:

Calculate the an % b where a, b and n are all 32bit integers.

Example

For 231 % 3 = 2

For 1001000 % 1000 = 0

Challenge 

O(logn)

题目思路:

题目要求用O(logn),那么就用二分法呗。每次recursion把n二分再二分。但是要注意到n可能为奇数,如果n为odd,那么n = n / 2 * 2 + 1.

Mycode(AC = 16ms):

class Solution {public:    /*     * @param a, b, n: 32bit integers     * @return: An integer     */    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 {            // get result of n / 2            long long half_pow = fastPower(a, b, n / 2);                        // get possible result of n / 2 * 2            long long tmp = (half_pow * half_pow) % b;                        // if n is odd, then result is n / 2 * 2 + 1            if (n % 2 == 1) {                return (tmp * a) % b;            }            else {                return tmp % b;            }        }    }};


0 0
原创粉丝点击