Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define MM (101)
- void mul(int A[MM][MM],int B[MM][MM],int R[MM][MM],int W,int M){
- F(W)FF(W)R[i][j]=0;
- F(W)FF(W){
- ll D=M*1ll*M,S=0;;
- FT(0,W)if((S+=A[i][k]*1ll*B[k][j])>=D)S-=D;
- R[i][j]=S%M;
- }
- }
- void pw(int M[MM][MM],int R[MM][MM],int W,ll k,int MD){
- static int E[MM][MM],H[MM][MM];
- F(W)FF(W)R[i][j]=E[i][j]=i==j;
- while(k){
- if(k&1)mul(E,M,R,W,MD),memcpy(E,R,sizeof(E));
- mul(M,M,H,W,MD);
- memcpy(M,H,sizeof(H));
- k>>=1;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement