poj 3233 矩阵幂取模
#include<iostream> using namespace std; struct node{int p[100][100];}; node a,b; int num,n,qq; node cheng(node a,node b) { node c; int j,i,w,k; for(i=0;i<num;i++) for(j=0;j<num;j++) { int w=0; //c.p[i][j]=0; for(k=0;k<num;k++) w+=(a.p[i][k]*b.p[k][j])%qq; c.p[i][j]=w%qq; } return c; } void solve(int m) { while(m) { if(m%2==1) b=cheng(a,b); a=cheng(a,a); m/=2; } } int main() { int i,j,k,m; while(~scanf("%d",&n)) { scanf("%d %d",&m,&qq); num=n*2; for(i=0;i<num;i++) for(j=0;j<num;j++) a.p[i][j]=0; for(i=0;i<n;i++) for(j=0;j<n;j++) scanf("%d",&a.p[i][j]); for(i=0;i<n;i++) a.p[i][i+n]=a.p[i+n][i+n]=1; for(i=0;i<num;i++) for(j=0;j<num;j++) { if(i==j) b.p[i][j]=1; else b.p[i][j]=0; } solve(m+1); for(i=0;i<n;i++) { for(j=0;j<n;j++) { if(i==j) { b.p[i][j+n]-=1; //若该值取余后为0 再减一 就成负数了 这一细节我一直都没有发现 wa后 测出确实有负数 找了好久的错误 我还以为是程序别的地方有问题 。。直到 if(b.p[i][j+n]<0)// 看了 奖金的博客 b.p[i][j+n]+=qq; } if(j==n-1) printf("%d\n",b.p[i][j+n]); else printf("%d ",b.p[i][j+n]); } } } return 0; }