基本的快速幂实现如下:
底数平方,指数减半!
#include <iostream>
using namespace std;
int qsm(long long m, long long k, long long p) //(m^k)%p
{
long long res = 1, t = m;//res为结果,t为m^1
while (k)
{
if (k & 1) res = res * t % p;//k为奇数时,res=res*t%p
t = t * t % p;//底数平方
k >>= 1;//指数减半
}
return res;
}
int main() {
cout<<qsm(2,9,1000000007); // 8
return 0;
}
C++中的快速幂实现类似
其理想时间复杂度是 O(log n)
,其中 n 是指数大小。这是因为在计算过程中,pow
函数使用了迭代的方式,每次将指数除以 2,直到幂达到指定的值。这种算法被称为“快速幂算法”。
然而,在实际的程序运行中,由于各种因素的影响,例如内存访问、CPU 速度、编译器优化等,pow
函数的实际运行时间可能会有所不同。
此外,如果你在一个循环或者复杂计算中使用 pow
函数,那么总体时间复杂度可能会受到这些因素的影响。