GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
/****************************************************************************1**2*A autgp_order.c ANUPQ source Eamonn O'Brien3**4*Y Copyright 1995-2001, Lehrstuhl D fuer Mathematik, RWTH Aachen, Germany5*Y Copyright 1995-2001, School of Mathematical Sciences, ANU, Australia6**7*/89#include "pq_defs.h"10#include "pcp_vars.h"11#include "pga_vars.h"12#include "constants.h"13#include "pq_functions.h"14#include "global.h"15#include "standard.h"1617#ifdef HAVE_GMP1819/* update the order of the automorphism group */2021void22update_autgp_order(int orbit_length, struct pga_vars *pga, struct pcp_vars *pcp)23{24register int *y = y_address;2526register int d, nmr_cent;27MP_INT prime, nmr_centrals, orbit_size;28MP_INT t;2930/* divide existing automorphism group order by size of orbit */31mpz_init_set_si(&orbit_size, orbit_length);32mpz_div(&(pga->aut_order), &(pga->aut_order), &orbit_size);3334/* multiply existing order by order of new central automorphisms */35if (pga->final_stage) {3637d = y[pcp->clend + 1];38/*39nmr_cent = y[pcp->clend + pcp->cc] - y[pcp->clend + pcp->cc - 1];40*/41nmr_cent = pga->nmr_centrals;4243mpz_init_set_si(&prime, pcp->p);44mpz_init(&nmr_centrals);4546/*47mpz_pow_ui (&nmr_centrals, &prime, nmr_cent * d);48*/49mpz_pow_ui(&nmr_centrals, &prime, nmr_cent);5051mpz_init(&t);52mpz_mul(&t, &(pga->aut_order), &nmr_centrals);53mpz_set(&(pga->aut_order), &t);54/* mpz_mul (&(pga->aut_order), &(pga->aut_order), &nmr_centrals);55*/56mpz_clear(&t);57mpz_clear(&prime);58mpz_clear(&nmr_centrals);59}60mpz_clear(&orbit_size);61}6263/* report the group and automorphism group order */6465void report_autgp_order(struct pga_vars *pga, struct pcp_vars *pcp)66{67int p, n;68char *s;6970if (StandardPresentation)71return;7273p = pcp->p;74n = pcp->lastg;7576if (pga->print_automorphism_order && (pga->capable || pga->terminal)) {77s = pga->upper_bound ? "at most " : "";78printf("Order of group is %d^%d;", p, n);79printf(" automorphism group order is %s", s);80mpz_out_str(stdout, 10, &(pga->aut_order));81printf("\n");82}83}8485/* compute (an upper bound for) the order of the automorphism group */8687void autgp_order(struct pga_vars *pga, struct pcp_vars *pcp)88{89register int *y = y_address;9091MP_INT diff, prime, nmr_centrals, sub, large;92MP_INT t;9394register int i, d, n, p;95char *s;9697p = pcp->p;98d = y[pcp->clend + 1];99n = y[pcp->clend + pcp->cc - 1];100101mpz_init_set_si(&(pga->aut_order), 1);102mpz_init_set_si(&prime, pcp->p);103104/* large = p^d */105mpz_init(&large);106mpz_pow_ui(&large, &prime, d);107108mpz_init_set_si(&sub, 1);109110for (i = 0; i < d; ++i) {111mpz_init(&diff);112mpz_sub(&diff, &large, &sub);113mpz_mul(&(pga->aut_order), &(pga->aut_order), &diff);114mpz_mul(&sub, &sub, &prime);115mpz_clear(&diff);116}117118mpz_init(&nmr_centrals);119mpz_pow_ui(&nmr_centrals, &prime, (n - d) * d);120/* mpz_mul (&(pga->aut_order), &(pga->aut_order), &nmr_centrals);121*/122mpz_init(&t);123mpz_mul(&t, &(pga->aut_order), &nmr_centrals);124mpz_set(&(pga->aut_order), &t);125mpz_clear(&t);126127mpz_clear(&sub);128mpz_clear(&large);129mpz_clear(&prime);130mpz_clear(&nmr_centrals);131132/* if d < n, we only have an upper bound for the order */133pga->upper_bound = (d < n);134135if (StandardPresentation) {136s = pga->upper_bound ? "at most " : "";137printf("Starting group has order %d^%d;", p, n);138printf(" its automorphism group order is %s", s);139mpz_out_str(stdout, 10, &(pga->aut_order));140printf(" \n");141}142}143#endif144145146