Po姐姐(出题人)博客: http://blog.csdn.net/popoqqq/article/details/43951401
考虑欧拉定理的拓展
ax≡ax mod ϕ(p)+ϕ(p) (mod p)
(同学告诉我)这条式子是不需要
gcd(a,p)=1
这个条件的
那么剩余的暴力计算吧……关于 ϕ 的折半的证明可以参考Po姐姐的
#include<stdio.h>
typedef long long ll;
inline int read(){int t;scanf("%d",&t);return t;}
inline int pow(int a,int b,const int &mod)
{
int rt=1;
for (;b;a=(ll)a*a % mod,b>>=1) if (b&1) rt=(ll)rt*a % mod;
return rt;
}
inline int phi(int x)
{
int rt=x;
for (int i=2;i*i<=x;i++) if (x%i==0){rt-=rt/i;while (x%i==0) x/=i;}
if (x^1) rt-=rt/x;
return rt;
}
int f(const int &x)
{
if (x==1) return 0;
int p=phi(x);
return pow(2,f(p)+p,x);
}
int main()
{
for (int T=read();T--;) printf("%d\n",f(read()));
}