整数高斯消元作用在于最后得出的解可以判断是否为整数。
首先看高斯消元法(浮点)
整数的高斯消元法,在消元时通过等式乘法,将同一项系数统一成它的最小公倍数,然后再进行消元。
核心代码:
int n,A[MAXN][MAXN*2];
int gcd(int a,int b){return b==0?a:gcd(b,a%b);}
int lcm(int a,int b){return a/gcd(a,b)*b;}
void Gauss()
{
int r,c,mxr,n=N,m=N*2+1,l,ta,tb;
for(r=1,c=1;r<=n&&c<m;r++,c++)
{
mxr=r;
for(int i=r+1;i<=n;i++)
if(abs(A[i][c])>abs(A[mxr][c]))
mxr=i;
if(A[mxr][c]==0)
{r--;continue;}
if(mxr!=r)swap(A[mxr],A[r]);
for(int i=1;i<=n;i++)
if(i!=r&&A[i][c])
{
l=lcm(abs(A[i][c]),abs(A[r][c]));
ta=l/A[i][c];
tb=l/A[r][c];
for(int j=c;j<=m;j++)
A[i][j]=A[i][j]*ta-A[r][j]*tb;
if(i<c)
A[i][i]*=ta;
}
}
}
因为没找到整数高斯消元裸题,所以没有完整代码。。。