#include <iostream>
#include <cmath>
using namespace std;
//同余模定理
long long tym(int x,int n){//复杂度是O(N)
long long ans = 1;
for(int i=0;i<n;i++){
int flag = x%233333;
ans = flag * ans;
}
return ans%233333;
}
//二分快速幂 注意为了防爆 long long 并且要随时%
long long fast_pow(long long x,long long n,long long mod){//n分解为2的幂次 持续x*x(但是初始是x*1):位运算末尾为1就一起乘上 不是跳过
long long result = 1;
while(n!=0){//位运算为0则退出循环
if( n&1 )//等价n%2==1 若二进制表示的n的最后一位是1 本次要加上
result = x * result %mod; //第一次进入循环是x的1次方
x = x*x %mod; //持续x*x(但是初始是x*1): 所以if语句在本句前面
n = n >> 1;//计算机n转为二进制右移一位
}
return result % mod;
}
int main() {
long long x,n,mod;
while(scanf("%lld %lld %lld",&x,&n,&mod)!=EOF){
cout<<fast_pow(x,n,mod);
}
}
05-28
619
