代码:
public bool Calc_M_1()
{
int[,] A = new int[nRank, nRank * 2];
int[] T = new int[nRank*2];
int i,j,k;
//construct the [M|E] matrix A
for (i = 0; i
{
for (j = 0; j
{
if (j
{
A[i, j] = nMatrix[i, j];
}
else
{
if (nRank == j-i)
{
A[i, j] = 1;
}
else
{
A[i, j] = 0;
}
}
}
}
//begin to metamorphose A
int a_1 = 0;
for (j = 0; j
{
//step1: get one reversiable element
for (i = j; i
{
if (CheckReverse(A[i,j]))
{
a_1 = GetReverse(A[i, j]);
for (k = 0; k
{
A[i, k] *= a_1;
A[i, k] %= (int)zt;
T[k] = A[i, k];
A[i, k] = A[j, k];
A[j, k] = T[k];
}
goto step2;
}
if (nRank - 1 == i) //last element of the column, still no one is reversiable
{
return false;
}
}
step2: //create the n-1 zeros of the column
for (i = 0; i
{
if (i != j)
{
int t = A[i, j]; //first element of Row i .
for (k = 0; k
{
A[i, k] -= t * A[j, k];
A[i, k] %= (int)zt;
if (A[i, k]<0)
{
A[i, k] += (int)zt;
}
}
}
}
}
//construct M_1
for (i = 0; i
{
for (j = 0; j
{
nDeMatrix[i,j] = A[i,j+nRank];
}
}
return true;
}