Calculate
for large values of B, P, and M using an efficient algorithm. (That's right, this problem has a time dependency !!!.)
input
Three integer values (in the order B, P, M) will be read one number per line. B and P are integers in the range 0 to 2147483647 inclusive. M is an integer in the range 1 to 46340 inclusive.
output
The result of the computation. A single integer.
sample input
3 18132 17 17 1765 3 2374859 3029382 36123
sample output
13 2 13195
#include<bits/stdc++.h>
using namespace std;typedef long long ll;
int pow_mod(int a,int n,int m){
if(n==0)return 1;
int x=pow_mod(a,n/2,m);
long long ans=(long long)x*x%m;
if(n%2==1)ans=ans*a%m;
return (int)ans;
}
int main() {
int B,P,M;
while(~scanf("%d%d%d",&B,&P,&M)){
printf("%d\n",pow_mod(B,P,M));
}
return 0;
}