Orz题解
降幂公式:a^x ≡a^(x modϕ(p)+ϕ(p)) (mod p)
#include<iostream>
#include<cstdio>
#include<cmath>
#define ll long long
using namespace std;
inline ll read()
{
int a=0,f=1; char c=getchar();
while (c<'0'||c>'9') {if (c=='-') f=-1; c=getchar();}
while (c>='0'&&c<='9') {a=a*10+c-'0'; c=getchar();}
return a*f;
}
ll phi(ll x)
{
ll tmp=x,m=sqrt(x);
for (int i=2;i<=m;i++)
if (x%i==0)
{
tmp-=tmp/i;
while (x%i==0) x/=i;
}
if (x>1) tmp-=tmp/x;
return tmp;
}
int pow(ll a,ll b,ll p)
{
int ans=1;
for (ll i=b;i;i>>=1,a=a*a%p)
if (i&1) ans=ans*a%p;
return ans;
}
ll F(ll x)
{
if (x==1) return 0;
int p=phi(x);
return pow(2,F(p)+p,x);
}
int main()
{
int T=read();
while(T--)
{
ll p=read();
printf("%d\n",F(p));
}
return 0;
}