그리고 요소 (루오 밸리 P1593) - 약수와 소인수 분해 +

주제 :

모든 제수에게 ^ 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 
* /

 

추천

출처www.cnblogs.com/mowanying/p/11426267.html