372. 超级次方

 1 class Solution 
 2 {
 3     int base = 1337;
 4 
 5     int mypow(int a, int k)
 6     {
 7         if (k == 0) return 1;
 8         a %= base;
 9 
10         if (k % 2 == 1) // k 是奇数
11         {
12             return (a * mypow(a, k - 1)) % base;
13         } 
14         else // k 是偶数
15         {
16             int sub = mypow(a, k / 2);
17             return (sub * sub) % base;
18         }
19     }
20 
21 public:
22     int superPow(int a, vector<int>& b) 
23     {
24         // 递归的 base case
25         if (b.empty()) return 1;
26         // 取出最后一个数
27         int last = b.back();
28         b.pop_back();
29         // 将原问题化简,缩小规模递归求解
30         int part1 = mypow(a, last);
31         int part2 = mypow(superPow(a, b), 10);
32         // 合并出结果
33         return (part1 * part2) % base;
34     }
35 };

 

posted @ 2020-04-23 14:47  Jinxiaobo0509  阅读(171)  评论(0)    收藏  举报