[LeetCode] 372. Super Pow @ python

一.题目:
计算 (a^b)%1377 的值(其中,a 是一个整数,b 是一个由数组表示的非常大的正整数).

Example 1:
Input: a = 2, b = [3]
Output: 8
Example 2:
Input: a = 2, b = [1,0]
Output: 1024

二.解题思路:
需要用到的数学知识

  1. a^b % 1337 = (a%1337)^b % 1337
  2. xy % 1337 = ((x%1337) * (y%1337)) % 1337, 其中xy是两个数x和y的乘积.
    代码如下:
    def superPow(self, a, b):
        """
        :type a: int
        :type b: List[int]
        :rtype: int
        """
        def mul(x, y):
            return (x*y)%k
        
        #(a^n)%k
        def pow(a, n):
            ret = 1
            for i in range(n):
                ret = mul(ret, a)
            return ret
        
        k = 1337
        a %= k  #1. a^b % 1337 = (a%1337)^b % 1337
        ret = 1
        for n in b: #2. xy % 1337 = ((x%1337) * (y%1337)) % 1337
            ret = mul(pow(ret,10), pow(a,n))
        return ret

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值