POJ3233

来源:互联网 发布:美人一笑也倾城网络剧 编辑:程序博客网 时间:2024/06/08 15:44
#include <iostream>#include <cstdio>#include <cstring>using namespace std;struct matrix{int a[32][32];};int m,n;matrix Sum(matrix x,matrix y){matrix temp;memset(temp.a,0,sizeof(temp.a));int i,j,k;for(i=0;i<n;i++){for(j=0;j<n;j++){for(k=0;k<n;k++){temp.a[i][j]=(temp.a[i][j]+x.a[i][k]*y.a[k][j]%m)%m;}}}return temp;}matrix Add(matrix x,matrix final){int i,j;matrix temp;for(i=0;i<n;i++){for(j=0;j<n;j++){temp.a[i][j]=(final.a[i][j]+x.a[i][j])%m;} }  return temp;}matrixMul(matrix c,int num){matrix origin ;int i,j;memset(origin.a,0,sizeof(origin.a));for(i=0;i<n;i++)origin.a[i][i]=1;while(num!=0){if(num&1)origin=Sum(origin,c);c=Sum(c,c);num>>=1;}return origin;}matrix Num(matrix x,int k){matrix temp;int i;if(k==1)return x;memset(temp.a,0,sizeof(temp.a));for(i=0;i<n;i++)temp.a[i][i]=1;temp=Add(temp,Mul(x,k>>1));temp = Sum(temp,Num(x,k>>1)) ;if ( k&1 )        temp = Add(temp,Mul(x,k)) ; return temp ;}int main(){int i,j,k;matrix temp;while(~scanf("%d",&n)){scanf("%d%d",&k,&m);for(i=0;i<n;i++){for(j=0;j<n;j++){scanf("%d",&temp.a[i][j]);}} temp=Num(temp,k);for(i=0;i<n;i++){for(j=0;j<n;j++){if(j==0){printf("%d",temp.a[i][j]);}else printf(" %d",temp.a[i][j]);}printf("\n");}}return 0;}

0 0
原创粉丝点击