快速幂+快速乘
求 ( a b )   m o d   p (a^b)\bmod p (ab)modp 1 < = a , b , p < = 1 0 9 1<=a,b,p<=10^9 1<=a,b,p<=109 快速幂直接过
当 1 < = a , b , p < = 1 0 18 1<=a,b,p<=10^{18} 1<=a,b,p<=1018 快速幂中间一步相乘会爆,用快速乘就行
#include<iostream>
using namespace std;
//1<=a,b,p<<10^18
long long calc(long long a,long long b,long long p){
long long ans=0;
while(b){
if( b & 1 ) ans=(ans+a)%p;
a=(a*2)%p;
b>>=1;
}
return ans;
}
int main(){
// freopen("a.txt","r",stdin);
long long a,b,p;
cin>>a>>b>>p;
long long ans=1%p;//p==1 ans=0 特殊情况
while(b){
if( b&1 ) ans=calc(ans,a,p);
a=calc(a,a,p);
b>>=1;
}
cout<<ans;
return 0;
}