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