You are given two integers a
and an array of integers b
that represents an extremely large integer. You need to calculate a
raised to the power of this large integer (a^b
) modulo 1337
.
Example:
a = 2
, b = [3]
Output: 8
a = 2
, b = [1, 0]
1024
1 <= a <= 2^31 - 1
1 <= b.length <= 2000
0 <= b[i] <= 9
b
does not contain leading zeros.Q: Can b
contain leading zeros?
A: No, b
does not contain leading zeros.
Q: What is the modulo value we need to compute?
A: The modulo value is 1337
.
Q: What is the maximum length of array b
?
A: The maximum length of the array b
is 2000.
Q: Should the solution handle extremely large integers efficiently? A: Yes, use appropriate methods to handle the extremely large power efficiently.
Given the constraints, we can’t directly compute a^b
as b
can be very large. Instead, we can utilize properties of modular arithmetic, particularly Euler’s theorem and modular exponentiation.
powmod(a, k, mod)
that computes (a^k) % mod
using iterative squaring for efficiency.b
in reverse, treating it like a big integer.(a^b) % mod = (a^(b1*10^k + b2*10^(k-1) + ... + bn)) % mod
.The solution will be efficient with time complexity approximately O(N * log(M))
, where N
is the length of b
and M
is the largest value of a
.
Here’s the implementation in C++:
class Solution {
private:
const int MOD = 1337;
int powmod(int a, int k, int mod) {
a %= mod;
int result = 1;
while (k > 0) {
if (k % 2 == 1) {
result = (result * a) % mod;
}
a = (a * a) % mod;
k /= 2;
}
return result;
}
public:
int superPow(int a, vector<int>& b) {
int result = 1;
for (int i = 0; i < b.size(); ++i) {
result = powmod(result, 10, MOD) * powmod(a, b[i], MOD) % MOD;
}
return result;
}
};
(a^k) % mod
using iterative squaring with time complexity O(log k)
.b
(considering it as a large number).This strategy ensures that even for large values of b
, the computation remains feasible within constraints.
Got blindsided by a question you didn’t expect?
Spend too much time studying?
Or simply don’t have the time to go over all 3000 questions?