为了防止幂运算导致数据溢出,需要使用快速幂算法。
算法复杂度:O(log2n)
算法的核心如下:
- 当指数为偶数时,指数除2,底数平方
- 当指数为奇数时,将ans乘底数,再将指数除2,底数平方
因为后面部分是一样的,可以放在判断条件外部一起执行
注意对于每个乘法操作都要取模!下面使用了一些位运算加快算法效率
typedef long long ll;
const int mod = 1000000007;
ll fast_power(ll base ,ll exp){//base底数,exp指数
ll ans = 1;
base%mod;
while(exp){
if(exp&1){//位运算判断奇偶性
ans =(ans*base)%mod;
}
base = (base*base)%mod;
exp>>=1;//相当于除2
}
return ans%mod;
}