GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
#include "typedef.h"1#include "matrix.h"2#include "longtools.h"3#include "getput.h"4#include "tools.h"5#include "zass.h"67extern int INFO_LEVEL;89matrix_TYP **cong_solve(matrix_TYP *A)10/* loest das system linearer congruenzen A x = 0 ( mod Z^n) fuer11x in Q^n.12Die loesungen stehen in cong_solve[0], die zugehoerigen nenner13in cong_solve[1], die transformationsmatrix in cong_solve[2] */14{15matrix_TYP **loesungen,16*umform,17*A_tr;18long i,19j,20found,21hilf;2223if (INFO_LEVEL & 4){24printf("entering cong_solve\n");25}2627loesungen = (matrix_TYP **) malloc(4 * sizeof(matrix_TYP*));2829umform = scalar(A->cols,1);3031A_tr = tr_pose(A);32loesungen[1] = long_elt_mat(umform,A_tr,NULL);33loesungen[1]->kgv = A->kgv;34loesungen[1]->flags.Integral = A->flags.Integral;35Check_mat(loesungen[1]);36loesungen[2] = tr_pose(umform);37loesungen[3] = copy_mat(loesungen[1]);38real_mat(loesungen[3], loesungen[3]->rows, loesungen[3]->rows);3940if (INFO_LEVEL & 4){41put_mat(loesungen[1],NULL,"loesungen[1]",2);42put_mat(umform,NULL,"umform",2);43}4445real_mat(loesungen[1],A->cols,A->cols);4647if (INFO_LEVEL & 4){48put_mat(A,NULL,"A",2);49put_mat(loesungen[1],NULL,"loesungen[1]",2);50put_mat(umform,NULL,"umform",2);51}5253loesungen[0] = init_mat(A->cols,1,"k");54found = 0;5556for (i=0;i<loesungen[1]->cols;i++){57if (((loesungen[1]->array.SZ[i][i])!=1) &&58((loesungen[1]->array.SZ[i][i])!=(-1))){5960/* die matrix der loesungen wird um eine spalte groesser */61found++;62real_mat(loesungen[0],loesungen[0]->rows,found);6364/* speichern der neu gefundenen loesung */65hilf = loesungen[0]->cols-1;66for (j=0;j<loesungen[0]->rows;j++){67loesungen[0]->array.SZ[j][hilf] =68umform->array.SZ[i][j];69}7071/* speichern des dazugehoerigen nenners */72loesungen[1]->array.SZ[found-1][found-1] = loesungen[1]->array.SZ[i][i];73/* loesungen[1]->array.SZ[hilf][hilf] = loesungen[1]->array.SZ[i][i]; */74}75}7677free_mat(umform);78free_mat(A_tr);7980if (found == 0)81real_mat(loesungen[0],loesungen[0]->rows,found);82real_mat(loesungen[1],loesungen[1]->rows,loesungen[0]->cols);83real_mat(loesungen[1],loesungen[0]->cols,loesungen[0]->cols);8485if (INFO_LEVEL & 4){86put_mat(loesungen[0],NULL,"loesungen[0]",2);87put_mat(loesungen[1],NULL,"loesungen[1]",2);88}8990Check_mat(loesungen[0]);91Check_mat(loesungen[1]);9293return loesungen;94} /* cong_solve */959697