-
Notifications
You must be signed in to change notification settings - Fork 0
/
Super_Pow.cpp
28 lines (27 loc) · 899 Bytes
/
Super_Pow.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/*
One knowledge: ab % k = (a%k)(b%k)%k
Since the power here is an array, we'd better handle it digit by digit.
One observation:
a^1234567 % k = (a^1234560 % k) * (a^7 % k) % k = (a^123456 % k)^10 % k * a^7 % k
Looks complicated? Let me put it other way:
Suppose f(a, b) calculates a^b % k; Then translate above formula to using f :
f(a,1234567) = f(a, 1234560) * f(a, 7) % k = f(a, 123456)^10%k * f(a,7)%k=f(f(a, 123456),10) * f(a,7)%k;
Implementation of this idea:
*/
class Solution {
public:
int powmod(int a,int k){
a=a%1337;
int result=1;
for(int i=0;i<k;i++)
result = (result*a)%1337;
return result;
}
int superPow(int a, vector<int>& b) {
if(b.empty())
return 1;
int back = b.back();
b.pop_back();
return powmod(superPow(a,b),10)*powmod(a,back)%1337;
}
};