LeetCode Super Pow详解

Your task is to calculate ab mod 1337 where a is a positive integer and b is an extremely large positive integer given in the form of an array.
如果对模幂算法不了解可参考
http://blog.csdn.net/taoyanqi8932/article/details/51918879

#include <iostream>
#include <vector>
#include <string>
using namespace std;
const int modulus = 1024;
int modpow(int base, int exponent, int modulus) {

    int result = 1;
    while (exponent > 0) {
        if (exponent & 1) {
            // multiply in this bit's contribution while using modulus to keep result small
            result = (result * base) % modulus;
        }
        // move to the next bit of the exponent, square (and mod) the base accordingly
        exponent >>= 1;
        base = (base * base) % modulus;
    }

    return result;
}
int superPow(int a, vector<int>& b)
{
    int n = b.size();
    int result = 1;
    for (int i = n - 1; i >= 0; i--) {
        result = (result*modpow(a, b[i], modulus)) % modulus;
        a = modpow(a, 10,modulus);
    }
    return result;
}
int main()
{
    vector<int>b = { 1,0 };
    //cout << modpow(4, 13, 497) << endl;
    cout << superPow(2, b);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值