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; } };