66 int i, j, k1, k2,
min, rank;
67 Matrix *A, *temp, *hermi, *unimod, *unimodinv;
74 fp = fopen(
"_debug",
"a");
75 fprintf(fp,
"\nEntered SOLVEDIOPHANTINE\n");
88 for (i = 0; i < A->
NbRows - 1; i++)
93 C = (Value *)malloc(
sizeof(Value) * (A->
NbRows - 1));
96 for (i = 0; i < k1; i++) {
103 Hermite(temp, &hermi, &unimod);
109 for (i = 0; i <
min; i++) {
118 T = (Value *)malloc(
sizeof(Value) * temp->
NbColumns);
120 for (i = 0; i < k2; i++)
123 for (i = 0; i < rank; i++) {
125 for (j = 0; j < i; j++) {
138 for (i = 0; i < k1; i++)
140 for (i = 0; i < k2; i++)
152 for (i = rank; i < hermi->
NbColumns; i++)
159 for (i = rank; i < hermi->
NbRows; i++) {
172 for (i = 0; i < k1; i++)
174 for (i = 0; i < k2; i++)
191 for (i = 0; i < U[0]->
NbRows; i++)
196 for (i = 0; i < unimodinv->
NbRows; i++) {
200 for (j = 0; j < unimodinv->
NbColumns; j++) {
215 for (i = 0; i < k1; i++)
217 for (i = 0; i < k2; i++)
243 int i, j, curend, curRow,
min, rank = 1;
252 for (i = 0; i < L->
NbRows; i++)
258 for (i = 0; i < curend; i++) {
278 while (add ==
True) {
283 for (i = 0; i < H->
NbRows; i++)
299 if (rank ==
min || curRow >= curend)
Matrix * AddANullRow(Matrix *M)
void ExchangeRows(Matrix *M, int Row1, int Row2)
Matrix * Matrix_Copy(Matrix const *Src)
int SolveDiophantine(Matrix *M, Matrix **U, Vector **X)
static void RearrangeMatforSolveDio(Matrix *M)
#define value_oppose(ref, val)
#define value_notzero_p(val)
#define value_zero_p(val)
#define value_assign(v1, v2)
#define value_set_si(val, i)
#define value_addmul(ref, val1, val2)
#define value_division(ref, val1, val2)
#define value_modulus(ref, val1, val2)
#define value_subtract(ref, val1, val2)
Matrix * Matrix_Alloc(unsigned NbRows, unsigned NbColumns)
int Matrix_Inverse(Matrix *Mat, Matrix *MatInv)
void Matrix_Free(Matrix *Mat)
Vector * Vector_Alloc(unsigned length)