力扣372. 超级次方

这篇博客探讨了如何计算大数 a 的 b 次方对 1337 取模的问题,主要利用了取模运算的性质和循环计算策略。虽然文中未使用快速幂算法,但原理相同,强调了避免数值溢出的重要性。通过循环计算每次的次方并及时取模,确保计算的准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 题解:这一道主要就是考的取模运算和快速幂,我这一道没有用快速幂,但是思想是一样。

就是算次方然后取模,主要注意的就是不能越界。

取模的公式:

(a + b) % p = (a%p + b%p) %p (对)
(a - b) % p = (a%p - b%p) %p (对)
(a * b) % p = (a%p * b%p) %p (对)
(a / b) % p = (a%p / b%p) %p (错)
(a / b) % p = (a * inv(a) ) % p = (a % p * inv(a) % p) % p

class Solution {//因为数可能太大,需要每次取模
public:
    int superPow(int a, vector<int>& b) {
        int nums=a%1337;                  //防止a过大
        int ret=1;
        for(int i=b.size()-1;i>=0;i--){   //每循环一次,第二次就是10次方倍放大
            int lastnums=nums;
            for(int j=1;j<10;j++){
                if(j==b[i]){              //数组每取一次的值
                    ret = nums*ret%1337;
                }
                nums=nums*lastnums%1337;
            }
        }
        return ret;
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值