주제 :
모든 제수에게 ^ B 및 찾기 (A, B <= 5e7)
#INCLUDE <비트 / stdc ++ H.> 사용 스페이스 성병; #DEFINE이 줄게 긴 긴 #DEFINE N 40 #DEFINE 개조 9901 LL 인분 [N], P [N]; INT CNT = 0 ; LL의 quick_pow (LL A, LL의 K) { LL ANS = 1 ; 하면서 (K) { 경우 (K & 1 ) = ANS ANS *는 %의 모드; = A *는 %의 모드; K >> = 1 ; } 반환 ANS; } 무효 으로 나눔 (LL가) { 에 대한 (int로 I = 2 ; i가 I * <= A; I ++) // 根号N地分解质因数 경우 (a % I == 0 ) { P는 [ ++ CNT = I; 동안 (a %의 I == 0 ) A / I =, NUM [CNT] ++ ; } 경우 (a> 1 ) p에 [++ CNT]는, NUM [CNT]을 ++ =; // 防止是质数 } INT 의 main () { LL A, B, ANS = 1 ; scanf와 ( " %의 LLD의 %의 LLD ' , A, 및 B); 으로 나눔 (a); // 의 printf ( "CNT % D \ 없음"CNT); 위한 ( int로 난을 =. (1) ; I ++는, I는 = CNT를 < ) { IF ((p [내가] - 1. ) % MOD == 0 ) ANS ANS = * (NUM [I] + 1이다. ) MOD의 %; // 추가 토론 P [I] - 그렇지이 역 소자 않는 한 개조 나눌 경우 // P는 [I]가 1 (=)을 개조 p는 [I] (= 1) (%의 개조) 원래 화학식 B 형 * 인분 [I] +1로 변환 1 추가 다른을 { LL X = quick_pow (P [I], NUM [I] * B + 1 ) quick_pow INV = (P [I] - 1 , mod- 2 ) ANS = ANS * (X- 1 ) INV의 * %의 MOD의 %의 MOD; } } 의 printf ( " % LLD의 \의 N- " , ANS) } / * 10000000 10000000 * /