题目描述

你的任务是计算372. 超级次方 - 图1 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出。
例如b = [4,3,3,8,5,2]

分析

取模运算满足分配律
372. 超级次方 - 图2

b由数组构成
由如下公式
372. 超级次方 - 图3
372. 超级次方 - 图4

代码实现

  1. class Solution {
  2. public:
  3. const int MOD = 1337;
  4. int pow(int x, int n) {
  5. int res = 1;
  6. while (n) {
  7. if (n % 2) {
  8. res = (long) res * x % MOD;
  9. }
  10. x = (long) x * x % MOD;
  11. n /= 2;
  12. }
  13. return res;
  14. }
  15. int superPow(int a, vector<int>& b) {
  16. int ans = 1;
  17. for (int i = b.size()-1; i >=0; i--)
  18. {
  19. ans = ans * pow(a, b[i]) % MOD;
  20. a = pow(a, 10);
  21. }
  22. return ans;
  23. }
  24. };