题目链接https://nanti.jisuanke.com/t/41299
三爷的博客https://blog.csdn.net/lgz0921/article/details/100187260?tdsourcetag=s_pctim_aiomsg
求a^(a^(a^(a……^a)))%m (共b个a)
存个板子
#include<bits/stdc++.h>
#pragma GCC optimize(3)
#define max(a,b) a>b?a:b
using namespace std;
typedef long long ll;
const int N=1e6+5;
int phi[N];
void getphi(){
phi[1]=1;
for(int i=2;i<N;i++){
if(!phi[i]){
for(ll j=i;j<N;j+=i){
if(!phi[j]) phi[j]=j;
phi[j]=phi[j]/i*(i-1);
}
}
}
}
ll ksm(ll a,ll b,ll c){
ll ans=1;
if(a>=c) a=a%c+c;//欧拉降幂
while(b){
if(b&1){
ans*=a;
if(ans>=c) ans=ans%c+c;
}
a*=a;
if(a>=c) a=a%c+c;
b>>=1;
}
return ans;
}
ll a,b,m;
ll e[N];
ll solve(ll id,ll mod){
if(e[id]==1) return 1%mod;
if(mod==1) return 1;
if(id==b){
if(e[id]>=mod) return e[id]%mod+mod;
else return e[id];
}
else return ksm(e[id],solve(id+1,phi[mod]),mod);
}
int main(){
getphi();
int T;
scanf("%d",&T);
while(T--){
scanf("%lld%lld%lld",&a,&b,&m);
for(int i=1;i<=b;i++) e[i]=a;
ll ans;
if(b==0) ans=1%m;
else if(a==1) ans=1;
else ans=solve(1,m);
printf("%lld\n",ans%m);
}
return 0;
}