[GAP Forum] the size of Galois group of a rational polynomial
Bill Allombert
Bill.Allombert at math.u-bordeaux.fr
Mon Jul 29 23:23:57 BST 2019
On Mon, Jul 29, 2019 at 02:13:42PM +0900, macsyma wrote:
> Dear GAP Forum,
>
> I'm looking for a quick way to get the size of Galois group of an irreducible integer polynomial f (to speed up PARI's function nfsplitting).
> The method I'm currently trying is what we call "local method" comparing the information of the factorization of f modulo prime numbers with the data of the cyclic index polynomials generated from TransGrp. Here is my PARI/GP's code:
>
> cnt(M) = [[ss, #select(tt -> ss == tt, M)]|ss <- Set(M)];
> fast_nfsplitting(f) =
> {
> my(d = poldegree(f));
> if(d <= 37 && (d-24)*(d-30)*(d-32)*(d-36) <> 0 && polisirreducible(f),
> my(dc = poldisc(f), P = 0, L = List([]), fd, ci, ds, ans, dd,
> CId = CI[d]); /* CI is a list s.t. [[[ 1/2*x_1^2+1/2*x_2, 1 ]],
> [[ 1/3*x_1^3+2/3*x_3, 1 ],[ 1/6*x_1^3+1/2*x_1*x_2+1/3*x_3, 1 ]], ...] */
> forprime(p = 2, 10^3,
> if(Mod(dc, p) <> 0,
> listput(L, fd = factormod(f, p, 1)[, 1]~);
> if(#fd == d, P++;if(P == 3, break))));
> ci = vecsum([vecprod([eval(concat("x_", j))|j <- s[1]])*s[2]|s <- cnt(L)])/#L;
> ds = vecmin([norml2(s[1]-ci)|s <- CId],&j);ans = CId[j];
> print([ds*1., dd = 1/polcoef(ans[1], d, x_1), ans[2]]);
> nfsplitting(f, dd),
> nfsplitting(f))
> };
> /* for(i = 2, 20, fast_nfsplitting(x^i-2));
> time = 960 ms.*/
>
> However, in the case of DegreeAction = 24, 30, 32, 36,
> it takes a considerable amount of time to generate the CycleIndex data files by my GAP's code:
>
> tst := function(G)
> local s;
> if IsSolvable(G) then s:=1; else s:=0; fi;
> return([CycleIndex(G),s]);
> end;;
>
> for n in [2..37] do
> fn := Concatenation("./CI.",String(n));
> PrintTo(fn, "[");
> L := AllTransitiveGroups(DegreeAction, n);
> for G in L do AppendTo(fn, tst(G), ","); od;
> AppendTo(fn, "]");
> # After this, reshape using sed etc.
> od;;
>
> and even if all the data is obtained, it will be huge so it will take time to search.
> Is there any other better way to get the size of Galois group of f?
PARI/GP has polgalois for degree <=11, GAP has GaloisType() which is
more general but slower. On the other hand, Magma GaloisGroup() function
is the best implementation by far.
We are working on a GAP implementation of some parts of the algorithm
used by magma, but it is not ready yet.
Cheers,
Bill.
More information about the Forum
mailing list