快速幂:
这个其实是属于数学问题,我们在用计算机计算an 的时候一般是将n个a直接相乘,复杂度是O(n)。但是一旦遇到n较大的时候很容易TLE。故产生了快速幂算法,其时间复杂度为log2(n)。
基本原理:
原理是基于以下这两个公式:
(1).x是奇数
xn =(x2%mod)n/2%mod;
(2)x是偶数
xn =((x2%mod)n/2*x)%mod;
实现代码:
#include<iostream>
using namespace std;
typedef long long ll;
const ll mod = 1e9 + 7;
ll power(ll x,ll n)
{
ll sum = 1, xx = x;
for (; n; n >>= 1)
{
if (n & 1)
{
sum *= xx;
sum %= mod;
}
xx = xx * xx;
xx %= mod;
}
return sum;
}
int main()
{
ll x, n;
while (cin >> x >> n)
{
cout << power(x, n) << endl;
}
return 0;
}