|
問題の説明
あなた三つの整数N、X、およびM、次の式が計算されます。
なお際マトリックス構造のランク
コード:
// の#include <ビット/ STDC ++ H> 使用して 名前空間STDを、 #defineは長い長いっ のtypedef LL xwz [ 55 ] [ 55 ]。 LLのN、X、M。 xwzのAA; xwzのC; xwzの解像度。 xwz RRES; [DDD LL 55 ]。 ボイド・チェン(CCC xwz、xwzのRR) { memsetの(RRES、0、はsizeof (RRES))。 以下のために(int型 i = 1 ; iが= X + < 2 I ++; ) のための(INT J = 1 ; J <= X + 2、J ++) のための(int型のk = 1 ; K <= X + 2、kは++ ) { RRES [I] [J] =(RRES [I] [J]%Mが+((CCC [I] [K]%mを)*(RR [K] [J]%のM)))%のM。 } のmemcpy(CCC、RRES、はsizeof (RRES))。 } ボイドKSM(xwzのCC) { LLのB = N。 memset(RES、0、はsizeof (RES))。 以下のために(int型 i = 1 ; iは= X + < 2 ; iは++)RES [i]は[I] = 1 。 一方、(b)は、 { もし、(B&1 )チェン(RES、CC)。 B >> = 1 。 チェン(CC、CC)。 } のmemcpy(CC、RES、はsizeof (RES))。 } int型のmain() { CIN >> N >> X >> M。 以下のために(int型 i = 0 ; iは= < 53 ; I ++ ) { Cを[I] [ 0 ] = 1 ; } のために(int型 i = 1 ; iが<= X + 2 ; I ++ ) のための(INT J = 1; J <= I; J ++ ) { C [I] [J] = C [I- 1 ] [j]の%のM + C [I- 1 ] [J- 1 ]%のM。 } のための(int型 J = 1 ; J <= X + 1、J ++ ) のための(INT i = 1 ; iは= J <; iは++を) { AA [I] [J] =(C [J- 1 ] [I- 1 ] * X)%のM。 } のAA [X + 1 ] [X + 2 ] = AAの[X + 2 ] [X + 2 ] =1 ; KSM(AA)。 以下のために(int型 i = 1 ; iは= X + < 1 ; iは++ ) { DDD [I] =のX。 } LL ANS = 0 。 用(INT J = 1 ; J <= X + 2、J ++ ) { ANS + = DDD [J] * AA [J] [X + 2 ]%のM。 } // のための(INT J = 1; J <= X + 1、J ++) // { // ANS + = DDD [J] * AA [J] [X + 1]%のM。 // } のprintf(" %のLLD "、ANS%のM)。 }