macsyma on Wed, 14 Aug 2019 07:55:03 +0200


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

the minimal polynomial over the composite field


Dear All,

As I mentioned in
https://pari.math.u-bordeaux.fr/archives/pari-users-1908/msg00014.html ,
I have the following (sub)goal:

"For a given irreducible g in Q[x], to find any one factor
 (with the minimum positive degree) of g over the algebraic number field K
 defined by polcyclo(p_1),...,polcyclo(p_m) where P={p_1,...,p_m}
 is all of the odd prime factors of poldegree(g), in other words,
 to find the minimal polynomial over K of an algebraic number defined by g."

Probably the simplest way to achieve this is to use 
the factorization of g over the composite field,
which is obviously expensive for getting one factor.
So my current method is
(step1) For each p in P, extract one factor g_i from factorized g
        over the Q(zeta_p) using the factorization over a subfield of Q(zeta_p).
(step2) Get the result as the GCD of all of g_i.

The code below is an implementation:

tst001(g) =
{
  my(P = select(r -> r - 2, factor(poldegree(g))[, 1]),
     p, q, s, t, u, A = g, gi);
  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, g)[1, 1]), u, t))[1, 1];
    if(#variables(gi)>1, A = gcd(A, gi) /* or RgX_gcd_simple or polcompositum method */ ));
  liftpol(A/pollead(A))
};

An example:
? tst001(nfsplitting(x^15-2,120))
%4 = x^15+((-15780*c5^3-15780*c5^2-25092)*c3+(-26520*c5^3-3740*c5^2-14480*c5-19786))

However, for large p in P, it still takes time to do nffactor.
Please let me know if there is a better way than the above.

macsyma