解法
据说是……欧拉定理降幂+快速幂
一个重要的同余式是——
对于整数m
,它的欧拉函数值为
ϕ
(
m
)
\phi(m)
ϕ(m),就是从1到m里和m互质的整数的数量
当对m取余时,
a
x
a^{x}
ax和
a
x
%
ϕ
(
m
)
+
ϕ
(
m
)
a^{x\%\phi(m)+\phi(m)}
ax%ϕ(m)+ϕ(m)得到的余数相等,即
a
x
≡
a
x
%
ϕ
(
m
)
+
ϕ
(
m
)
(
mod
m
)
a^{x}\equiv a^{x\%\phi(m)+\phi(m)}(\text{mod }m)
ax≡ax%ϕ(m)+ϕ(m)(mod m)
降完之后就可以直接用快速幂
class Solution(object):
def superPow(self, a, b):
"""
:type a: int
:type b: List[int]
:rtype: int
"""
MOD = 1337
EULER = 1140
exp = 0
for bb in b:
exp = (exp*10+bb)%EULER
exp += EULER
ans = 1
while exp:
a %= MOD
if exp&1:
ans = ans*a%MOD
a=a*a
exp = exp>>1
return ans