フェイス質問
解決
$ M $ここによって元のタイトルに$ K $を示し、
{!\製品版のT_I} $$ \合計は_ {\ sum_ {iは1} ^ mt_i = = N} \ FRAC {N!} \ PROD [:$私は$回T_I番目のリピータリピート$を$、最終的な答えはに等しく、処分さD |!T_I] \\ = N \総和_ {\ sum_ {i = 1} ^ mt_i = N} \ PROD \ FRAC {[D | T_I]} {!T_I} $$
構造生成機能$ A(X)= \ sum_ {i = 0} ^ {\ inftyの} [D | I] {!I} \ FRAC {1}のx ^ I $、次に答えは$ A ^ M $ A $に等しいです。 $ N!$を乗じたN $倍係数
用单位根反演化简$ A(X)$:$$開始\ {ALIGN *} A(X)&= \ sum_ {I = 0} ^ {\ inftyの} [D | I] \ FRAC {1} {私!}のx ^私\\&= \ sum_ {i = 0} ^ {\ inftyの} \ FRAC {X ^ I} {私!} * \ FRAC {1} {D} \ sum_ {J = 0} ^ {D-1} w_d ^ {IJ} \\&= \ FRAC {1}、{D} \ sum_ {J = 0} ^ {D-1} \ sum_ {I = 0} ^ {\ inftyの} \ FRAC {(w_d ^ J)^ I} {I!} X ^ I \\&= \ FRAC {1}、{D} \ sum_ {J = 0} ^ {D-1} E ^ {w_d ^ JX} \端{ALIGN *} $$
$$ A ^ M = \ FRAC {1} {D ^ M}(\ sum_ {J = 0} ^ {D-1} E ^ {w_d ^ JX})^ M $$
$ $ D = 1、答えは$ M ^ N $です
$ D = 2 $时、$$ \ {ALIGN *}を始めるA ^ M&= \ FRAC {1} {D ^ M}(\ sum_ {J = 0} ^ {D-1} E ^ {w_d ^ JX} )^ M \\&= \ FRAC {1} {2 ^ M}(E ^ {W_2 ^ 0X} + E ^ {W_2 ^ 1X})^ M \\&= \ FRAC {1} {2 ^ M} \ sum_ {i = 0} ^ {M} \ binom {M} {I} E ^ {(W_2 ^ 0I + W_2 ^ 1(MI))X} \端{ALIGN *} $$
答案为:$$ \開始{ALIGN *}回答&= N * \ FRAC {1} {2 ^ M} \ sum_ {I = 0} ^ M \ binom {M} {I} \ FRAC {(W_2 ^ 0I + W_2 ^ 1(MI))^ n}は{N!} \\&= \ FRAC {1} {2 ^ M} \ sum_ {I = 0} ^ M \ binom {M} {I}(W_2 ^ 0I + W_2 ^ 1(MI))^ N \端{ALIGN *} $$
$ D = 3 $时、$$ \ {ALIGN *}を始めるA ^ M&= \ FRAC {1} {D ^ M}(\ sum_ {J = 0} ^ {D-1} E ^ {w_d ^ JX} )^ M \\&= \ FRAC {1} {3 ^ M}(E ^ {w_3 ^ 0X} + E ^ {w_3 ^ 1X} + E ^ {w_3 ^ 2×})^ M \\&= \ FRAC {1} {3 ^ M} \ sum_ {i = 0} ^ {M} \ sum_ {J = 0} ^ {MI} \ binom {M} {I} \ binom {MI} {J} E ^ {( w_3 ^ 0I + w_3 ^ 1J + w_3 ^ 2(MIJ))X} \端{ALIGN *} $$
答案为:$$ \開始{ALIGN *}回答&= N * \ FRAC {1} {3 ^ M} \ sum_ {I = 0} ^ M \ sum_ {J = 0} ^ {MI} \ binom {M } {I} \ binom {MI} {J} \ FRAC {(w_3 ^ 0I + w_3 ^ 1J + w_3 ^ 2(MIJ))^ n}は{N!} \\&= \ FRAC {1} {3 ^ M} \ sum_ {I = 0} ^ M \ sum_ {J = 0} ^ {MI} \ binom {M} {I} \ binom {MI} {J}(w_3 ^ 0I + w_3 ^ 1J + w_3 ^ 2 (MIJ))^ N \端{ALIGN *} $$
ユニットルート$ w_d ^ 1 = G ^ {\ FRAC {MOD-1}、{D}} $、$ G $ $ MOD $は、この問題の原始根が$ 7 $に等しくなります
$ O(M ^ {D-1} \ Nログ)$
コード:
#include <cstdioを> する#include <iostreamの> する#include <アルゴリズム> の#include <CStringの> 使用して 名前空間をSTD。 typedefの長い 長いLL。 const int型のmod = 19491001 ; INT追加(int型のx、int型Y) { リターン X + Y <MOD?X + Y:X + Y - MOD。 } int型 RDC(int型のx、int型のY) { リターン X - Y < 0?X - Y + MOD:X - Y。 } 、LL X(qpowちゃいますINTのY) { LL RET = 1 。 一方、(Y) { 場合(Y&1 ) RET = RET * X%MOD。 X = X * X%MOD。 Y >> = 1 。 } 戻りRET。 } int型N、M、D。 名前空間D2 { ボイドワーク() { LL ANS = 0、MUL = 1 。 以下のための(int型 I = 0; I <= M。++ i)が { ANS =追加(ANS、qpow(RDC(2 * I、M)、N)* MUL%MOD)。 MUL =(MUL *(M - I)%のMOD)* qpow(I + 1、MOD - 2)%MOD。 } のprintf(" %のLLD "、ANS * qpow(qpow(2、M)、MOD - 2)%のMOD)。 } } 名前空間D3 { LL C [ 1005 ] [ 1005 ]。 ボイドのinit() { 用(INT I =0 ; I <= M。++ I) { C [i]が[ 0 ] = 1 ; 用(INT J = 1 ; J <= I; ++ j)は C [I] [J] =追加(C [I- 1 ] [J- 1 ]、C [I- 1 ] [J])。 } } ボイドワーク() { INIT()。 LL W1 = qpow(7、(MOD - 1)/ 3)、W2 = W1 * W1%MOD、ANS = 0 。 以下のための(int型 I =0 ; I <= M。++ I) のために(int型 J = 0 ++; J <= MI J) ANS =追加(ANS、(C [m]は[I] * C [MI] [J]%のMOD)(qpow * ( - I - Iは、(W1 * J%MOD、W2 *(M追加J)%のMOD))を追加し、N)%のMOD)。 printf(" %のLLD "、ANS * qpow(qpow(3、M)、MOD - 2)%のMOD)。 } } int型のmain() { scanf関数(" %D%D%D "、&N、&M、&D)。 もし(D == 1 ) { のprintf(" %のLLD " 、qpow(M、N))。 リターン 0 ; } もし、(D == 2 ) D2 ::ワーク(); 他の D3 ::作品(); リターン 0 ; }