macsyma on Wed, 09 Oct 2019 05:46:22 +0200


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: the minimal polynomial over the composite field


Thank you for your continuous improvement.
The following is a comparison of the first half of the method 
you have taught me and tst002 (using nffactor).

install(quotient_group,GG);
install(group_quotient,GG);
iscycquotient(G,H)=
{
  if(!galoisisnormal(G,H),return(0));
  my(Q=quotient_group(group_quotient(G,H),G));
  my(A=galoisisabelian(Q,2));
  !(A===0) && #A<=1;
};

{for(n=2,25,
G=galoissplittinginit(x^n-2);
S=galoissubgroups(G);
C=[H|H<-S,iscycquotient([G.gen,G.orders],H)];
L=[galoisfixedfield(G,H,1)|H<-C];
my(Q=bnfinit(a));
M=[rnfconductor(Q,H)[1]|H<-L])};

/* time = 1min, 47,883 ms. */

install(RgX_gcd_simple,GG);
tst002(fx) =
{
  my(A = gx = nfsplitting(fx), P, p, q, s, t, u, gi);
  P = select(r -> r - 2, factor(poldegree(gx))[, 1]);
  for(i = 1, #P,
    q = polcyclo(p = P[i], u = eval(concat("c", p)));
    [s, t] = nfsubfields(q)[-2..-2][1];
    gi = nffactor(q, subst(liftpol(nffactor(s, gx)[1, 1]), u, t))[1, 1];
    A = if(#variables(A) == 1, gi, if(#variables(gi) == 1, A, RgX_gcd_simple(A, gi))));
  liftpol(A/pollead(A))
};

for(n=2,25,tst002(x^n-2));

/* time = 1min, 4,412 ms. */

Factoring by galoisfixedfield(,,2) is attractive, 
but it seems time-consuming to put together preparations for that.

> Also your example x^n-2 are very sparse which make computation
> faster compared to generic example.
How about 2*(1+x)^n-x^n (dense and having an isomorphic splitting field) ? 

macsyma