【Leetcode】372. Super Pow 372. 超级次方

解法

据说是……欧拉定理降幂+快速幂
一个重要的同余式是——
对于整数m,它的欧拉函数值为ϕ(m)\phi(m),就是从1到m里和m互质的整数的数量
当对m取余时,axa^{x}ax%ϕ(m)+ϕ(m)a^{x\%\phi(m)+\phi(m)}得到的余数相等,即axax%ϕ(m)+ϕ(m)(mod m)a^{x}\equiv a^{x\%\phi(m)+\phi(m)}(\text{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

相关文章:

  • 2021-07-18
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-06-26
  • 2021-08-20
  • 2022-01-29
  • 2022-03-03
猜你喜欢
  • 2022-12-23
  • 2021-11-27
  • 2022-03-01
  • 2021-11-21
  • 2022-12-23
  • 2021-10-18
  • 2022-02-15
相关资源
相似解决方案