Leetcode 372. Super Pow (Medium) (cpp)
Tag: Math
Difficulty: Medium
/*
372. Super Pow (Medium)
Your task is to calculate ab mod 1337 where a is a positive integer and b is an extremely large positive integer given in the form of an array.
Example1:
a = 2
b = [3]
Result: 8
Example2:
a = 2
b = [1,0]
Result: 1024
*/
class Solution {
public:
int superPow(int a, vector<int>& b) {
if (a % 1337 == 0) return 0;
int p = 0;
for (int i : b)
p = (p * 10 + i) % 1140;
if (p == 0) p += 1140;
return power(a, p, 1337);
}
int power(int x, int n, int mod) {
int ret = 1;
for (x %= mod; n; x = x * x % mod, n >>= 1)
if (n & 1) ret = ret * x % mod;
return ret;
}
};