leetcode 50. Pow(x, n) 、372. Super Pow

50. Pow(x, n)

 

 

 

372. Super Pow

https://www.cnblogs.com/grandyang/p/5651982.html

https://www.jianshu.com/p/b256bd531df0

做这个题之间先了解两个公式:

公式一:a^b mod c = (a mod c)^b mod c
公式二:(ab) mod c = (a mod c)(b mod c) mod c

 

这道题题让我们求一个数的很大的次方对1337取余的值,即a^b mod 1337。输入的b是一个数组,且每一个数组代表一位,所以将求次方转换为223 = (22)10 * 23这种形式。

利用公式二将原式转化,即223 mod 1337 = ((22)10 mod 1337)*(23 mod 1337)mod 1337。

 

class Solution {
public:
    int superPow(int a, vector<int>& b) {
        int res = 1;
        for(int i = 0;i < b.size();i++){
            res = pow(res,10) * pow(a,b[i]) % 1337;
        }
        return res;
    }
    int pow(int a,int n){
        if(n == 0)
            return 1;
        if(n == 1)
            return a % 1337;
        return pow(a % 1337,n/2) * pow(a % 1337,n - n/2) % 1337;
    }
};

 

posted @ 2019-05-27 20:55  有梦就要去实现他  阅读(182)  评论(0编辑  收藏  举报