Bill Allombert on Wed, 31 Jul 2019 11:06:53 +0200


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

Re: nfgaloisconj


On Wed, Jul 31, 2019 at 10:40:45AM +0900, macsyma wrote:
> Thank you, Bill.
> 
> > nfsplittingaut
> 
> 
> The following simple one seems to be slightly faster than it 
> as far as experiments using x^n-1, polcyclo() and galoisgetpol().
> 
> G12p(f) =
> {
>   my(g = nfsplitting(f), d = poldegree(g),
>      R = nfisincl(f, g), v = variable(f), P, N, M, G1, K, G2);
>   forprime(p = 2, oo, P = polrootsmod(g, p)~;
>            if(#P == d && Mod(poldisc(f), p), break));
>   N = subst(R, v, P);
>   M = Map(Mat([N[1]~, [1..poldegree(f)]~]));
>   G1 = [Vecsmall([mapget(M, s)|s <- t])|t <- N];
>   K = matinverseimage(matconcat(vector(d, i, subst(R, v, i))~), [1..d]~);
>   G2 = [R*[K[s]|s <- Vec(t^(-1))]~|t <- G1];
>   [G1, G2]
> };
> 
> In what kind of case is it faster to use the quotient ring ?

I was expecting that if the degree of g get large, finding 
p would be costly. 
In your experiments, g = f, so g is never really large in any case.
(galoisinit always do as you do).

Cheers,
Bill