模板——行列式

正常计算行列式以及模意义下通用的行列式模板,时间复杂度$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 }

 

posted @ 2018-01-03 08:12  Troywar  阅读(403)  评论(0编辑  收藏  举报