使用pow(a,n)计算
a
n
a^n
an,时间复杂度是
O
(
n
)
O(n)
O(n)
(返回值是int,使用long就收可能出问题)
使用快速幂可以把时间复杂度降到 O ( l o g 2 n ) O(log_2n) O(log2n)
#include<bits/stdc++.h>
using namespace std;
const int mod = 1e9+7;
long long pow_mod(long long a, long long n)
{
long long ans = 1;
while(n){
if(n&1){
ans = (ans * a) % mod;
}
a = (a * a) % mod;
n >>= 1;
}
return ans;
}
int main()
{
cout << fastpow(5,5);
return 0;
}
计算大数的时候,很可能会溢出,注意取模的位置
const int mod=1e9+7;
减法:被减数加上模,计算后再次取模
加法和乘法计算后取模