题目链接
快速幂的简单题目,关键是理解快速幂的数学原理。
例如16可以拆成4 * 4,4可以拆成2 * 2,因而我们计算时可以将2的平方的结果存储起来,在计算4的平方时,可以直接调用这个结果。
也就是把计算2 * 2 * 2 * 2 =16的过程转化为计算2 * 2 = 4, 4 * 4 = 16。
计算的步骤少了,因而计算的速度更快。
那么 a ^ b = (a ^ (b / 2)) ^ 2
这个公式可以采用二进制的方式进行优化。
将b转写为二进制,b / 2相当于b左移一位。
代码如下:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int pow_(int a, int b, int c)
{
int ans = 1;
for(; b; b>>=1)
{
if(b&1) ans = (ll) ans * a % c;
a = (ll)a * a % c;
}
return ans % c;
}
int main(){
int a,b,c;
cin>>a>>b>>c;
cout<<pow_(a,b,c);
}