Digit-by-digit exponent
Time O(len × log 10) Space O(1)result = 1; for each digit d: result = pow(result, 10) × pow(a, d) mod 1337.
a = 2, b = [1, 0]vars(vars)
Step 1/3Start with result = 1, which is 2 to the power 0.
class Solution {
private static final int M = 1337;
public int superPow(int a, int[] b) {
int result = 1;
for (int d : b) result = pow(result, 10) * pow(a, d) % M;
return result;
}
private int pow(int base, int e) {
int r = 1;
base %= M;
for (int i = 0; i < e; i++) r = r * base % M;
return r;
}
}Verdict: Horner's rule in the exponent.