【手撕】高效进行模幂运算

总结:对乘法的结果求模,等价于先对每个因子求模,然后对因子相乘的结果再求模。

 

class Solution {
private:
    int base = 1337;
    int mypow(int a, int b) {
        a %= base; // 对因子求模
        int res = 1;
        for (int i = 0; i < b; i++) {
            res *= a;
            res %= base;
        }
        return res;
    }
public:
    int superPow(int a, vector<int>& b) {
        if (b.empty())
            return 1;
        int last = b.back();
        b.pop_back();
        int part1 = mypow(a,last);
        int part2 = mypow(superPow(a,b),10);
        // 每次乘法都要求模
        return (part1*part2)%base;
    }
};

高效进行幂运算

#include<iostream>
#include<vector>
using namespace std;

// 高效进行幂运算
int mypow(int a, int b)
{
    if (b == 0)
        return 1;
    if (b % 2 == 1)
    {
        return a * mypow(a, b - 1);
    }
    else
    {
        int rec = mypow(a, b / 2);
        return rec * rec;
    }
}

int main()
{
    int a = 2;
    int b = 10;
    cout << mypow(a, b) << endl;
    return 0;
}

 

posted @ 2021-02-23 14:46  不妨不妨,来日方长  阅读(112)  评论(0编辑  收藏  举报