快速幂
给定a, b, p,求a^b % p的值
普通算法需要O(n)的复杂度,快速幂通过二分将时间复杂度将至O(logn)。
题目链接:洛谷 p1226
Ac代码:
#include<iostream>
using namespace std;
int a, b, p;
int FastPow(int a, int b, int p) {
int ret = 1;
while(b) {
if(b & 1) ret = 1LL * ret * a % p;
b >>= 1;
a = 1LL * a * a % p;
}
return ret;
}
int main() {
cin >> a >> b >> p;
cout << a << "^" << b << " mod " << p << "=" << FastPow(a, b, p) << endl;
}
矩阵快速幂
常用于快速的求出数列的第n项