模板——行列式
正常计算行列式以及模意义下通用的行列式模板,时间复杂度$n^3log(n)$
1 const int N=500; 2 3 ll a[N][N]; 4 5 int n,mod; 6 7 inline ll det(){ 8 ll res=1; 9 for(int i=0;i<n;++i){ 10 if(!a[i][i]){ 11 bool flag=false; 12 for(int j=i+1;j<n;++j){ 13 if(a[j][i]){ 14 flag=true; 15 for(int k=i;k<n;++k) swap(a[i][k],a[j][k]); 16 res=-res; 17 break; 18 } 19 } 20 if(!flag) return 0; 21 } 22 for(int j=i+1;j<n;++j){ 23 while(a[j][i]){ 24 ll t=a[i][i]/a[j][i]; 25 for(int k=i;k<n;++k){ 26 a[i][k]=(a[i][k]-t*a[j][k])%mod; 27 swap(a[i][k],a[j][k]); 28 } 29 res=-res; 30 } 31 } 32 res*=a[i][i]; 33 res%=mod;//模意义下的语句,不是模意义则不加 34 } 35 if(res<0) res+=mod; 36 // printf("res=%lld",res); 37 return res; 38 }
没有什么不可能。