题意:
n是n行n列,模p,求矩阵的行列式模p.
题解:
矩阵行列式的模板题,这个模板如果要模数的话,就需要用到逆元,但是我还不会,到时候再学吧。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define INF 0x3f3f3f3f
#define LL long long int
const int MAXN=200+7;
LL a[MAXN][MAXN];
LL n,mod;
LL det() //按列化为下三角
{
LL res=1;
for(int i=0;i<n;i++)
{
if(!a[i][i])
{
bool flag=false;
for(int j=i+1;j<n;j++)
{
if(a[j][i])
{
flag=true;
for(int k=i;k<n;k++)
{
swap(a[i][k],a[j][k]);
}
res=-res;
break;
}
}
if(!flag)
return 0;
}
for(int j=i+1;j<n;j++)
{
while(a[j][i])
{
LL t=a[i][i]/a[j][i];
for(int k=i;k<n;k++)
{
a[i][k]=(a[i][k]-t*a[j][k])%mod;
swap(a[i][k],a[j][k]);
}
res=-res;
}
}
res*=a[i][i];
res%=mod;
}
return (res+mod)%mod;
}
int main()
{
while(~scanf("%lld%lld",&n,&mod))
{
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
scanf("%lld",&a[i][j]),a[i][j]%=mod;
printf("%lld\n",det());
}
return 0;
}