P3390 【模板】矩阵快速幂
2017-08-16 16:09
232 查看
luogu 传送门
矩阵乘法的法则
矩阵乘法的法则
矩阵乘法的法则
矩阵乘法的法则
#include<iostream> #include<cstdio> #include<algorithm> #include<string> #include<cstring> #define LL long long #define MOD 1000000007 using namespace std; LL a[109][109],ans[109][109],bak[109][109],K; int n; void Fast_Pow() { while(K) { if(K%2) { for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) bak[i][j]=ans[i][j],ans[i][j]=0; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) for(int k=1;k<=n;k++) ans[i][j]=(ans[i][j]+bak[i][k]*a[k][j]%MOD)%MOD; } for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) bak[i][j]=a[i][j],a[i][j]=0; for(int< 4000 /span> i=1;i<=n;i++) for(int j=1;j<=n;j++) for(int k=1;k<=n;k++) a[i][j]=(a[i][j]+bak[i][k]*bak[k][j]%MOD)%MOD; K/=2; } } int main() { scanf("%d%lld",&n,&K); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%lld",&a[i][j]); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) ans[i][j]=a[i][j]; K--;Fast_Pow(); for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) printf("%lld ",ans[i][j]); puts(""); } return 0; }
相关文章推荐