倍增,就是成倍增长。指我们进行递推时,如果状态空间很大,通常线性递推无法满足时空复杂度要求,那么可以通过成倍增长的方式,只递推状态空间中 2 的整数次幂位置的值为代表。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll f(ll a, ll b,ll c){
int ans=1;
while(b){
if(b%2!=0){
ans=(ans*a)%c;
}
a=(a*a)%c;
b/=2;
}
return ans;
}
int main()
{
ll b,p,k;
cin>>b>>p>>k;
cout<<f(b,p,k);
return 0;
}