typedef int Matrix[maxn][maxn]; 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; } int gauss(Matrix A,int n,int m) { int row,col; for(row=0,col=0; row<n&&col<m; row++,col++) { int r=row; for(int i=row+1; i<n; i++) if(abs(A[i][col])>abs(A[r][col])) r=i; if(r!=row) for(int j=0; j<=m; j++) swap(A[r][j],A[row][j]); if(A[row][col]==0) { row--; continue; } for(int k=row+1; k<n; k++)//消元过程 if(A[k][col]) { int LCM=lcm(abs(A[k][col]),abs(A[row][col])); int ra=LCM/abs(A[k][col]); int rb=LCM/abs(A[row][col]); if (A[k][col]*A[row][col]<0) rb=-rb; for(int j=col; j<=m; j++) { A[k][j]=A[k][j]*ra-A[row][j]*rb; } } } for(int i=row; i<n; i++)//无解情况 if(A[i][m]) return -1; if(row<m) return 0;//多解 for(int i=m-1; i>=0; i—)//回代过程 { for(int j=i+1; j<m; j++) { A[i][m]-=A[j][m]*A[i][j]; } A[i][m]/=A[i][i]; } return 1; }