题目传送门
题意:
题解:
看了这篇博客才会的。
递归处理即可。
递归终点是 , 任何正整数模1都等于0,返回0即可。
感受:
知道了欧拉降幂是干什么用的。
代码:
#include<bits/stdc++.h>
using namespace std ;
typedef long long ll ;
ll phi(ll n)
{
ll ans = n ;
for(ll i = 2 ; i * i <= n ; i ++)
{
if(n % i == 0)
{
ans -= ans / i ;
while(n % i == 0) n /= i ;
}
}
if(n > 1) ans -= ans / n ;
return ans ;
}
ll qpow(ll a , ll b , ll mod)
{
ll ans = 1 ;
while(b)
{
if(b & 1) ans = ans * a % mod ;
b >>= 1 , a = a * a % mod ;
}
return ans % mod ;
}
ll solve(ll p)
{
if(p == 1) return 0 ;
ll phi_p = phi(p) ;
return qpow(2 , solve(phi_p) + phi_p , p) ;
}
int main()
{
int t ;
scanf("%d" , &t) ;
while(t --)
{
ll p ;
scanf("%lld" , &p) ;
printf("%lld\n" , solve(p)) ;
}
return 0 ;
}