【手撕】高效进行模幂运算
总结:对乘法的结果求模,等价于先对每个因子求模,然后对因子相乘的结果再求模。
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; }