矩陣快速冪 模板
阿新 • • 發佈:2018-04-15
AI class nbsp continue cin ast std OS 矩陣快速冪
在矩陣快速冪中要註意可以把兩個矩陣化為同大小的時候運算
#include<iostream> #include<cstring> #include<cstdio> using namespace std; const int MAX_N=62; int n; struct JuZhen { int m[MAX_N][MAX_N]; }a,b; JuZhen Mul(JuZhen x,JuZhen y) { JuZhen sum; memset(sum.m,0,sizeof(sum.m)); for(intk=0;k<n;k++) { for(int i=0;i<n;i++) { if(!x.m[i][k]) continue; for(int j=0;j<n;j++) { sum.m[i][j]=(sum.m[i][j]+x.m[i][k]*y.m[k][j]); } } } return sum; } JuZhen fastm(JuZhen a,int b) { JuZhen s; memset(s.m,0,sizeof(s.m)); for(int i=0;i<n;i++) { s.m[i][i]=1; } while(b) { if(b&1) s=Mul(s,a); a=Mul(a,a); b=b>>1; } return s; } int main() { memset(a.m,0,sizeof(b.m)); memset(b.m,0,sizeof(b.m)); cin>>n; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { cin>>a.m[i][j]; } } for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { cin>>b.m[i][j]; } } }
矩陣快速冪 模板