关于高斯消元
查看原帖
关于高斯消元
160839
Prean楼主2022/1/17 15:11

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]);//exit(-1);
			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;
		}
	}
}

问一下为什么除了正常的高斯消元多了一个初等列变换啊,是在乘 P1P^{-1} 吗/kel

如果是的话为什么可以这么干/kel

2022/1/17 15:11
加载中...