Метод Гаусса ошибка в коде C#
Сразу к делу. У меня есть список битовых массивов, где каждый битовый массив в списке - это показатели степеней простых из факторной базы в разложении определённого числа, взятые по модулю 2. Мне нужно найти линейную зависимость между этими векторами (битовыми массивами). Число простых - P, число векторов - P + 1. В интернете нашёл реализацию метода Гаусса, но там на вход должна поступать матрица не в том формате, в котором у меня всё хранится, приходится её транспонировать. Ну и дополнять столбцом свободных членов. Делаю это так.
var A = new List<BitArray>(P + 1);
for (int i = 0; i < P; i++)
{
A.Add(new BitArray(P + 1));
for (int j = 0; j < P + 1; j++)
{
A[i][j] = e[j][i];
}
}
Далее эту матрицу подаю в реализацию метода Гаусса.
BitArray Gauss(List<BitArray> matrix)
{
BitArray result = new BitArray(matrix[0].Count);
int[] where = new int[matrix[0].Count];
for (int i = 0; i < where.Length; i++)
{
where[i] = -1;
}
for (int col = 0, row = 0; col < matrix[0].Length && row < matrix.Count; ++col)
{
for (int i = row; i < matrix.Count; ++i)
if (matrix[i][col])
{
var c = matrix[i];
matrix[i] = matrix[row];
matrix[row] = c;
break;
}
if (!matrix[row][col])
continue;
where[col] = row;
for (int i = 0; i < matrix.Count; ++i)
if (i != row && matrix[i][col])
matrix[i] = matrix[i].Xor(matrix[row]);
++row;
}
for (int i = 0; i < matrix[0].Length; ++i)
if (where[i] != -1)
result[i] = matrix[where[i]][matrix[0].Length - 1] ^ matrix[where[i]][i];
return result;
}
Где у меня ошибки в коде и как их исправить?