题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3884
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll eulr(ll n)
{
ll ans=n;
ll tmp=n;
for(ll i=2;i*i<=tmp;i++){
if(n%i==0){
ans=ans/i*(i-1);
while(n%i==0){
n/=i;
}
}
}
if(n>1){
ans=ans/n*(n-1);
}
return ans;
}
ll qpow(ll x,ll y,ll mo)
{
ll ans=1;
while(y){
if(y&1){
ans=ans*x%mo;
}
x=x*x%mo;
y>>=1;
}
return ans;
}
ll solve(ll n)
{
if(n==1){
return 0;
}
return qpow(2,solve(eulr(n))+eulr(n),n);
}
int main()
{
ll p;
int t;
scanf("%d",&t);
while(t--){
scanf("%lld",&p);
printf("%lld\n",solve(p));
}
return 0;
}
/*
3
2
3
6
*/
参考:https://blog.csdn.net/qq_37632935/article/details/81264965