核心思想是二进制转十进制
比如需要求 a11
11的二进制表示为1011
∵11=23∗1+22∗0+21∗1+20∗1
∴a11=a23∗a21∗a20
运用位运算,就可以方便地快速幂
代码是对某一个数取模,洛谷上有相应的模板题
#include <cstdio>
#include <iostream>
using namespace std;
typedef long long LL;
LL b, p, k, ans = 1;
LL fpower(LL b, LL p, LL k) {
for(; p; p >>= 1, b = ((b%k)*(b%k))%k)
if(p&1)
ans = ((ans%k)*(b%k)) % k;
return ans % k;
}
int main() {
cin >> b >> p >> k;
cout << fpower(b, p, k);
return 0;
}
时间复杂度大概达到O(logn)

本文介绍了一种高效计算指数运算的方法——快速幂算法。通过将指数转换为二进制表示,并利用位运算加速计算过程,该算法能显著提高计算效率,时间复杂度可达O(logn)。文中提供了一个C++实现示例,用于计算一个数的幂并对结果取模。
503

被折叠的 条评论
为什么被折叠?



