RT,题解将其消成上海森派森堡矩阵的代码是这样的:
void calmatrix(int a[N][N],register int n)
{
register int i,j,k,r;
for (i=2;i<=n;i++)
{
for (j=i;j<=n&&!a[j][i-1];j++);
if (j>n) {continue;}
if (j>i)
{
swap(a[i],a[j]);
for (k=1;k<=n;k++) swap(a[k][j],a[k][i]);
}
r=a[i][i-1];
for (j=1;j<=n;j++) a[j][i]=(ll)a[j][i]*r%p;
r=ksm(r,p-2);
for (j=i-1;j<=n;j++) a[i][j]=(ll)a[i][j]*r%p;
for (j=i+1;j<=n;j++)
{
r=a[j][i-1];
for (k=1;k<=n;k++) a[k][i]=(a[k][i]+(ll)a[k][j]*r)%p;
r=p-r;
for (k=i-1;k<=n;k++) a[j][k]=(a[j][k]+(ll)a[i][k]*r)%p;
}
}
}
问一下为什么除了正常的高斯消元多了一个初等列变换啊,是在乘 P−1 吗/kel
如果是的话为什么可以这么干/kel