2019ICPC 네트워크 남경 역 B 대회 타이틀 super_log (오일러 내림차순

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); 
	} 
}

 

추천

출처www.cnblogs.com/wzgg/p/11495107.html