HZOI20190823 Cマジック

数論ボードコレクション。

私たちは尋ねます:

$ N ^ {\和\ limits_ {i = 1} ^ {N} [GCD(I、N)== 1] C_ {N} ^ {I}} MODのp $

ここで、pは、54184622である合成数であります

インデックスはないフラッシュパワー、のみMOD PHI(P)、PHI(P)= P-1によって、組み合わせの数ではなく、素数p-1、併用CRT

書式#include <iostreamの> 
の#include <cstdioを> 
する#include <CStringの> 
の#include <キュー> 
の#include <スタック> 
の#include <cmath> 
の#include <アルゴリズム> 
に#define MOD 54184622 
の#define int型、長い長い
の#define MAXN 1000005 
名前空間を使用してSTD; 
N INT、G、[7]、プライム[7] = {0,2,3,5,7,129011}。
INTのFAC [7] [MAXN]、ANS。
{(int型B、int型のP INT)のint q_pow 
    INT RES = 1。
    (B){ながら
        IF(B&1)RES =(RES * A)%のP。
        =(* A)%のP。
        B >> = 1。
    } 
    戻りRES%のP。
} 
int型GCD(INT BをINT){ 
	戻りB == 0:GCD(B、%b)は、?
}  
INT C(整数nは、整数M、INT P){
	場合はリターン1(N Mを==)。
	IF(M> N)戻り0; 
	FAC [P]を返す[N] * q_pow(FAC [P] [M] * FAC [P] [nm]の%素数[P]、素数[P] -2、素数[P])。
} 
INTルーカス(整数nは、整数M、INT P){ 
	IF(M == 0)リターン1。
	ルーカス返す(N /素数[P]、M /素数[P]、P)%MOD * C(N%素数[P]、m個の%P、[P]素数)[P]プライム%。
} 
int型のCRT(){ 
	int型、P = 27092310、RES = 0。
    (;私は= 5 <I ++はiは1 = INT)のため
        のRES =(RES + P /プライム[I] * [I]%のP *はq_pow(P /プライム[i]は、プライム[I] -2、プライム[I])%のP)%のP。
    解像度を返します。
} 
(){主符号付き
    のscanf( "%のLLDの%のLLD"、&N、&G)。
    以下のために(; iは= 5 <; I = 1 int型I ++){ 
        FACを[I] [0] = 1; 
        (INT J = 1; J [i]は<=プライム; J ++)のための
             FAC [i]は[J] = FAC [i]は[J-1] * [I] J%でプライム。
    } 
    {(; iが=分(N、G)を<I ++はiは1 = INT)のために
        (GCD(I、N)= 1!)もし続けます。
        {(J ++ INT J = 1; J <= 5)のための
            [J] =([J] +ルーカス(G、I、J))%プライム[J]。
		} 
	} 
    ANS = CRT()。
    printf( "%LLDする\ n"、N q_pow(ANS、MOD))。
    0を返します。
}

 

おすすめ

転載: www.cnblogs.com/Juve/p/11418911.html