无限的2
用扩展欧拉定理处理式子
X>phi(p),上面的数
语言描述一下
我们从上面处理,处理到大于phi(p),用定理
我们接着处理
之后我们就可以接着处理Y
即递归phi(p)
确定递归终点phi(p)==1 return 0 剩余值Z,Z%phi(1)+phi(1)=0;
// Problem: P4139 上帝与集合的正确用法
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P4139
// Memory Limit: 125 MB
// Time Limit: 1000 ms
//
// Powered by CP Editor (https://cpeditor.org)
#include<iostream>
#include<map>
using namespace std;
typedef long long ll;
map<int,int> mp;
ll phi(ll x){
if(mp[x]){
return mp[x];
}
ll t=x;
ll res=x;
for(int i=2;i<=x/i;i++){
if(x%i==0){
res=res/i*(i-1);
while(x%i==0){
x/=i;
}
}
}
if(x>1){
res=res/x*(x-1);
}
mp[t]=res;
return res;
}
ll qmi(ll a,ll b,ll mod){
ll res=1;
while(b){
if(b&1){
res=res*a%mod;
}
a=a*a%mod;
b>>=1;
}
return res;
}
ll work(ll p){
if(p==1){
return 0;
}else{
return qmi(2,work(phi(p))+phi(p),p);
}
}
void solve(){
int p;
cin>>p;
cout<<work(p)<<'\n';
}
int main(){
int t;
cin>>t;
while(t--){
solve();
}
return 0;
}