// (C) 2018 University of Bristol. See License.txt #include "Matrix.h" #include "QGroup.h" #include "Math/bigint.h" #include #include void QGroup::assign(int mm,int seed) { m=mm; #define numsmallprimes 46 int small_primes[numsmallprimes]= { 2, 3, 5, 7,11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173, 179,181,191,193,197,199}; /* Create list of prime basic generators */ vector pr(m); int npr=0; for (int i=0; i(npr)); int i,j,te,ord,e; /* Basic relations...*/ for (i=0; i=0; i--) { int ei=nn%d[i]; nn=(nn-ei)/d[i]; elem=(elem*powerMod(g[i],ei,m))%m; } elems[n]=elem; return elem; } ostream& operator<<(ostream& s,const QGroup& QGrp) { s << QGrp.m << " " << QGrp.ngen << " " << QGrp.Gord << endl; int i; for (i=0; i>(istream& s,QGroup& QGrp) { s >> QGrp.m >> QGrp.ngen >> QGrp.Gord; QGrp.g.resize(QGrp.ngen); QGrp.d.resize(QGrp.ngen); int i; for (i=0; i> QGrp.g[i] >> QGrp.d[i]; } QGrp.elems.resize(QGrp.Gord); for (i=0; i> QGrp.elems[i]; } return s; }