【problem description】
求 a 的 b 次方对 p 取模的值,其中 1≤a,b,p≤10^9
【input format】
三个用空格隔开的整数a,b和p。
【output format】
一个整数,表示a^b mod p的值。
【sample input】
2 3 9
【sample output】
8
【analysis】
这题本来是个很简单的分治题目。
具体如何分治看代码-_-
不过lyd给的数据还是很强的,如果p=1,那么所有的答案都是0,所以无论如何返回值是都要%p
【accepted code】
#include<bits/stdc++.h>
using namespace std;
long long a,b,p;
void readp(){
cin>>a>>b>>p;
}
long long cot(int x){
if(x==1)return a%p;
if(x==0)return 1%p;
long long mid=x/2;
long long t=cot(mid);
long long ans=0;
ans=(t*t)%p;
if(x%2!=0)ans=(ans*a)%p;
return ans;
}
void work(){
long long ans=cot(b);
cout<<ans<<endl;
}
int main(){
readp();
work();
return 0;
}