372. 超级次方

108 阅读1分钟

题目:
你的任务是计算 ab 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出。

算法:

方法一:快速幂
1.为什么要powAndMod:
如果只pow不mod会溢出
2:ans = ans * powAndMod(a, b[i]) % mod的依据:

图片.png

func superPow(a int, b []int) int {
    ans := 1 
    mod := 1337

    for i := len(b) - 1; i >= 0 ; i -- {
        ans = ans * powAndMod(a, b[i]) % mod
        a = powAndMod(a, 10)
    }
    return ans
}

func powAndMod(a, b int) int {
    ans := 1
    for b > 0 {
        if b & 1 == 1 {
            ans = ans * a % 1337
        }
        a = a * a  % 1337
        b = b >> 1
    }
    return ans
}