题意:R:=(B^p) mod M,现在给你B,p和m,求R。
思路:牵扯到指数,如果硬算肯定会越界,如果每次求指数之前先求余,那也会超时,P的极值是2^31,所以可以用二分来做,省时省力。
#include <iostream>
using namespace std;
int B,P,M;
long long slove(int B,int P,int M)
{
if(P==0)
return 1%M;
if(P==1)
return B;
if(P%2==0)
{
long long s=slove(B,P/2,M);
return (s*s)%M;
}
long long s=slove(B,P/2,M);
return (s*s*B)%M;
}
int main()
{
cin.sync_with_stdio(false);
while(cin>>B>>P>>M)
{
long long res=slove(B%M,P,M);
cout<<res<<"\n";
}
return 0;
}