原理:高斯消元 O(n^3)
代码:
ll determinant(int n)
{
//a为方阵
//mod根据实际情况而定
ll ans=1;
for(int k=1;k<=n;k++)
{
ll pos=-1;
for(int i=k;i<=n;i++)
if(a[i][k])
{
pos=i;
break;
}
if(pos==-1)return 0;
if(pos!=k)
for(int j=k;j<=n;j++)swap(a[pos][j],a[k][j]);
ll inv=mod_pow(a[k][k],mod-2,mod);
for(int i=k+1;i<=n;i++)
if(a[i][k])
{
ans=ans*inv%mod;
for(int j=k+1;j<=n;j++)
a[i][j]=((a[i][j]*a[k][k]%mod-a[k][j]*a[i][k]%mod)%mod+mod)%mod;
a[i][k]=0;
}
}
for(int i=1;i<=n;i++)
ans=ans*a[i][i]%mod;
return ans;
}
转载自原文链接, 如需删除请联系管理员。
原文链接:求行列式的值,转载请注明来源!