Welcome to Subscribe On Youtube
372. Super Pow
Description
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.
Example 1:
Input: a = 2, b = [3] Output: 8
Example 2:
Input: a = 2, b = [1,0] Output: 1024
Example 3:
Input: a = 1, b = [4,3,3,8,5,2] Output: 1
Constraints:
1 <= a <= 231 - 1
1 <= b.length <= 2000
0 <= b[i] <= 9
b
does not contain leading zeros.
Solutions
-
class Solution { private final int mod = 1337; public int superPow(int a, int[] b) { long ans = 1; for (int i = b.length - 1; i >= 0; --i) { ans = ans * qpow(a, b[i]) % mod; a = qpow(a, 10); } return (int) ans; } private long qpow(long a, int n) { long ans = 1; for (; n > 0; n >>= 1) { if ((n & 1) == 1) { ans = ans * a % mod; } a = a * a % mod; } return ans; } }
-
class Solution { public: int superPow(int a, vector<int>& b) { using ll = long long; const int mod = 1337; ll ans = 1; auto qpow = [&](ll a, int n) { ll ans = 1; for (; n; n >>= 1) { if (n & 1) { ans = ans * a % mod; } a = a * a % mod; } return (int) ans; }; for (int i = b.size() - 1; ~i; --i) { ans = ans * qpow(a, b[i]) % mod; a = qpow(a, 10); } return ans; } };
-
class Solution: def superPow(self, a: int, b: List[int]) -> int: mod = 1337 ans = 1 for e in b[::-1]: ans = ans * pow(a, e, mod) % mod a = pow(a, 10, mod) return ans
-
func superPow(a int, b []int) int { const mod int = 1337 ans := 1 qpow := func(a, n int) int { ans := 1 for ; n > 0; n >>= 1 { if n&1 == 1 { ans = ans * a % mod } a = a * a % mod } return ans } for i := len(b) - 1; i >= 0; i-- { ans = ans * qpow(a, b[i]) % mod a = qpow(a, 10) } return ans }
-
function superPow(a: number, b: number[]): number { let ans = 1; const mod = 1337; const qpow = (a: number, n: number): number => { let ans = 1; for (; n; n >>= 1) { if (n & 1) { ans = Number((BigInt(ans) * BigInt(a)) % BigInt(mod)); } a = Number((BigInt(a) * BigInt(a)) % BigInt(mod)); } return ans; }; for (let i = b.length - 1; ~i; --i) { ans = Number((BigInt(ans) * BigInt(qpow(a, b[i]))) % BigInt(mod)); a = qpow(a, 10); } return ans; }