上面题目的代码
//1 = a, b, c < 2^63
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
//mul比mul2快
ll mul(ll a,ll b,ll mod)
{
a%=mod;
b%=mod;
ll res=0;
while(b){
if(b&1){
res+=a;
if(res>=mod)
res-=mod;
}
b>>=1;
a<<=1;
if(a>=mod) a-=mod;
}
return res;
}
ll mul2(ll a,ll b,ll mod)
{
ll res=0;
while(b){
if(b&1) res=(res+a)%mod;
a=(a+a)%mod;
b>>=1;
}
return res;
}
ll ksm(ll a,ll b,ll m)
{
ll res=1;
while(b){
if(b&1)
res=mul2(res,a,m);
a=mul2(a,a,m);
b>>=1;
}
return res;
}
int main()
{
ll a,b,c;
while(scanf("%lld%lld%lld",&a,&b,&c)!=EOF)
{
if(c==1)
{
printf("0\n");
continue;
}
printf("%lld\n",ksm(a,b,c));
}
return 0;
}