以前打的矩阵幂真是丑的要死,现在比以前强了一点,重载运算符能理解一些了,对于矩阵乘认识也深了,码一小份模板。
#include<iostream> #include<algorithm> #include<cmath> #include<cstring> #include<cstdio> #include<vector> #include<queue> #include<stack> #include<set> #include<map> using namespace std; const int P=2019; int n; struct Matrix { int x[50][50]; Matrix(){ memset(x,0,sizeof(x)); } friend Matrix operator * (Matrix a,Matrix b){ Matrix c=Matrix(); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) for(int k=1;k<=n;k++) c.x[i][j]=(c.x[i][j]+a.x[i][k]*b.x[k][j])%P; return c; } void I(){ for(int i=1;i<=n;i++) x[i][i]=1; return ; } void add(int a,int b,int c){ x[a][b]=c;return ; } void put(int a,int b){ printf("%d ",x[a][b]);return ; } }; Matrix qpow(Matrix a,int k){ Matrix c=Matrix(),b=a; c.I(); for(;k;k>>=1,b=b*b) if(k&1) c=c*b; return c; } int main(){ }
add、put操作和qpow写外面纯属个人喜好,重载*还是很优秀的,个人不太喜欢重载^。