NOIPシミュレーションテスト30は、「・1・魔法を返します。」

魔法

まず、オリジナルのスタイル指数は確かに$長い$ $ $長く爆発的になります

まず、式オイラーの定理によれば、我々は置き換えることができ、元の$ N ^ {\和\ limits_ {i = 1} ^ {iが<= N} [GCD(I、N)== 1] C_ {G} ^ {I } \%PHI(P)} \%P $

得られた生成物は$ PHI(54184622)のオイラー関数PHI(2)* PHI(27092311)$を=です

次に$ PHI(27092311)= 27092310 $ $ PHI(2)= 1 $ $ PHIので(54184622)= 27092310 $

私たちは、今記載され$ N ^ {\和\ limits_ {i = 1} ^ {iが<= N} [GCD(I、N)== 1] C_ {G} ^ {I} \%27092310} \ %pが$

$2709.231万= 2 * 3 * 5 * 7 * $ 129011と組み合わせの数を求めているCRT裸ボード$要求が終了されるだろう$

注:プリ階乗と逆、またはアウトの時間を持っています

#include <ビット/ STDC ++ H>
 の#defineは長い長いっ
 #defineし 333333 
のLL K、P、N、Gと、
// PHI(54184622)= 27092310
 // 27092310 = 2 * 3 * 5 * 7 * 129011 
LL W [ 7 ] = { 0235712901154184622 }、傑[ 6 ] [A] 、NI [ 6 ] [A]、DL [A]、B [A]。
LLのexgcd(LLのB -1,11,11-&X、LL&Y){
     場合(Bの== 0 ){ 
        X = 1 ; Yは= 0 ;
        リターンA; 
    } 
    LL GCD = exgcd(B、%のB、X、Y)。
    LLさt =のX。
    X = Y。
    Y = TA / b *表Y。
    リターンGCD。
} 
LL孟(LLのX、LL kを、LLのCIX){ 
    LL ANS = 1 (; kは、kは>> = 1、X = X * X%[CIX] w)の
         場合(K&1 
            ANS = ANS * X%[CIX、W。
    戻るANSを。
} 
LL中国(){ 
    LLのX、Y、A = 0、M、N = 1 にとって(LL i = 1 ; iが= < 5 iは++; 
        N * = W [i]は、
    (LL i = 1 ; iが= < 5、iが++ ){ 
        M = N / [I] W。
        exgcd(W [i]は、M、X、Y)。=(+ yを×m個の*のB [I])%N。
    } 
    場合(A> 0を返します返す + N; 
} 
LLのGCD(LLのX、LLのY){ 
    場合(Yの== 0リターンX。
    戻り GCD(Y、Xの%のY)。
} 
LL JIC(LL N、LLのM、LLのCIX){
    もし(M> N)戻り 0 ;
    もし(M == 0リターン 1 戻り傑[CIX] [N] [CIX] * NI [CIX] * NI [CIX] [M]%W [CIX] [nm]の重量%%[CIX] Wは、
} 
LLのルーカス(LL N、LLのM、LL CIX){ 
    場合(N == 0リターン 1 戻り(CIX、[CIX] W N [CIX] W%、m個%)JICを*ルーカス(N / W [CIX]、M / W [CIX]、CIX)%[CIX、W。
} 
使用して 名前空間STDを、
INT メイン()
{ 
    scanf関数(" %のLLDの%のLLD "、&​​N、&G)。    
    (LL I =1 ; iが=分(G、N)<; Iは++ ){
         場合(GCD(I、N)== 1 
            DL [ ++ DL [ 0 ] = I。
    } 
    の場合(I = 11 1 ; iは= < 5 ; iは++ ){ 
        サボ[I] [ 0 ] = 1 ; 
        NI [I] [ 0 ] = 1 (J = 11 1 ; J <W [i]は、J ++ 
            サボ[I] [J] =サボ[i]は[J- 1 ] * J%のW [i]は、
        NI [I] [I]、[W - 1 ] =孟(サボ[I] [I] W - 1 ]×[I] -2 、I)。
        (LL J = W [I] - 2 ; J> = 1 ; j-- 
            NI [I] [J] =のNI [I]、[J + 1 ] *(J + 1)%W [i]は、
        (LLのJ = 1 ; J <= DL [ 0 ]; J ++ 
            (B [I] + =ルーカス(G、DL [j]は、i))を(%)= [I] W。
    } 
    LL J = 中国()。
    LLのK =孟(N、J、6 )。
    COUT << K << ENDL。
    // 模「私は」B「私は」剩余W     
}
コードの表示

 

おすすめ

転載: www.cnblogs.com/znsbc-13/p/11401052.html