https://nanti.jisuanke.com/t/41299
질문의 의미는 : 고려하자 ^ (A ^ (A ^ (...))), A B의 총 (모드 P) 결과.
생각 :이되는 전원 타워 기능은 오일러 방정식을 내림차순 재귀 솔루션.
#INCLUDE <. 비트 / stdc ++ H> #DEFINE 긴 긴 것이다 네임 스페이스를 사용하여 표준; 지도 <INT, INT> 오일러; LL A, B, 개조; 피 INT (INT N) { 현재 값 int = N; INT RET = N; 경우 (euler.count (현재)) 반환 오일러 [현재]; 대해 INT (I = 2; I <= SQRT (N) 나 ++) { 경우 (N % I == 0) { RET RET = / I *을 (I-1); 동안 (N %의 I == 0) N / = 1; } } 의 경우 (N> 1) RET RET = / N * (N-1); 오일러 [현재] = RET; RET를 반환; } LL MOD (LL N, INT 모드) { 창 N <개조 N : (N + %의 개조 개조); } LL의 quick_mod (LL베이스, LL의 P, 지능 모드) { LL의 RET = 1; 이렇게 { (p & 1)의 경우 RET = MOD (*베이스의 RET, 개조); 염기 = MOD (베이스 *베이스 모드); } 반면 (p = >> 1); RET를 반환; } (INT의 L, R의 INT, INT 개조) 해결하는 것이다 { (L은 R == || 개조 == 1) MOD를 (a, 개조)를 호출하는 경우; quick_mod 반환 (a가 해결 (L + 1, R, 피 (MOD)) 모드); } INT의 main () { INT의 T; scanf와 ( "%의 D ', T); {- (T) 동안 , scanf와 ( "% LLD % LLD % LLD"& A, B, 및 개조) 경우 (a || == 1의 B == 0) { 의 printf ( "% D \ 없음", 1 %의 개조); 잇다; } 경우 (b == 1) { 의 printf ( "가 % d \ 없음" 잇다; } LL ANS = (1, B 모드) %의 개조를 해결; 의 printf ( "% LLD \ 없음", ANS); } }