372. 超级次方(算法思维系列)


372. 超级次方

题目

你的任务是计算 a的b次方 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出。
在这里插入图片描述

解题思路

主要掌握(a*b)%k=(a%k)(b%k)%k主要思路见书355

代码

class Solution {
    int base = 1337;

    public int superPow(int a, int[] b) {
        //base case:任何数的0次方都是1
        if (b == null || b.length == 0) {
            return 1;
        }
        //取出最后一个数
        int last = b[b.length - 1];
        //更新一下b
        b = Arrays.copyOfRange(b, 0, b.length - 1);

        int part1 = myPow(a, last);
        int part2 = myPow(superPow(a, b), 10);
        return (part1 * part2) % base;
    }

    //计算a的k次方,然后与base求模
    public int myPow(int a, int k) {
        //对因子取模 基于(a*b)%k = (a%k)(b%k)%k
        a %= base;
        int res = 1;
        for (int i = 0; i < k; i++) {
            res *= a;
            res %= base;
        }
        return res;

    }
}

文章作者: fFee-ops
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 fFee-ops !
评论
  目录