POINT:
打表找规律题。
ans=2^(2^n-n).
注意费马小定理降幂。
和mod是2的时候,不能用,特判。
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <cmath>
#include <utility>
using namespace std;
const int maxn = 1e6+55;
#define LL long long
LL n,k,p;
LL qkm(LL base,LL mi,LL mod)
{
LL ans = 1;
base%=mod;
while(mi){
if(mi&1)
ans=ans*base%(mod);
base=base*base%(mod);
mi>>=1;
}
return ans;
}
int main()
{
while(~scanf("%lld%lld%lld",&n,&k,&p))
{
LL mi = (qkm(2,n,p-1)-n%(p-1)+(p-1))%(p-1);
LL ans= qkm(2,mi,p);
if(k==0) ans=(ans-1+p)%p;
if(p==2)ans=ans^1;
printf("%lld\n",ans%p);
}
}