数論ボードコレクション。。。
私たちは尋ねます:
$ 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を返します。 }