模幂运算求解
- 递归求解用数组表示的指数:
a
[
1
,
5
,
6
,
4
]
=
a
4
×
a
[
1
,
5
,
6
,
0
]
=
a
4
×
(
a
[
1
,
5
,
6
]
)
10
a^{[1,5,6,4]}=a^4 \times a^{[1,5,6,0]} = a^4 \times (a^{[1,5,6]})^{10}
a[1,5,6,4]=a4×a[1,5,6,0]=a4×(a[1,5,6])10
- 防止栈溢出的模运算:
(
a
∗
b
)
%
k
=
(
a
%
k
)
(
b
%
k
)
%
k
(a * b) \% k = (a\%k)(b\%k) \% k
(a∗b)%k=(a%k)(b%k)%k
class Solution {
private:
int base = 1337;
public:
int mypow(int a, int k) {
a %= base;
int res = 1;
while(k--) {
res *= a;
res %= base;
}
return res;
}
int superPow(int a, vector<int>& b) {
if (b.empty()) return 1;
int last = b.back();
b.pop_back();
int part1 = mypow(a, last);
int part2 = mypow(superPow(a, b), 10);
return part1 * part2 % base;
}
};