What I am trying to do is to use the prime factorisation of m to compute in another field than Q(zeta_m) (i.e. Q(zeta_m1, zeta_m2, ..., zeta_ml)) or Q[x]/<Phi_m> (i.e. Q[x1, ..., xl] / <Phi_m1, ..., Phi_ml>) because I need m between 1000 and 10000 and actually sage is not able to do this. The idea is to have a faster arithmetic.
In fact I should have written: Idl = [cyclotomic_polynomial(p^e, 'q'+str(i)) for (i, (p, e)) in enumerate( factor(m))] In this case 2 cyclotomic polynomials never define the same extension field right? PS: Phi_m = cyclotomic_polynomial(m) Le mercredi 30 avril 2014 10:07:55 UTC+2, John Cremona a écrit : > > On 29 April 2014 19:23, Martin Albrecht > <martinr...@googlemail.com<javascript:>> > wrote: > > On Monday 28 Apr 2014 14:57:59 François Colas wrote: > >> Hi Martin, > >> > >> Here is two examples using multivariate quotients and extension fields > >> which should be faster than computing CyclotomicField(m) or > >> NumberField(cyclotomic(m), 'r') : > >> > >> m = 3*5*7 > >> pi = prime_factors(m) > >> Qi = PolynomialRing(QQ, len(pi), 'q') > >> Idl = [cyclotomic_polynomial(p, 'q'+str(i)) for (i, p) in > enumerate(pi)] > >> K = Qi.quo(Idl, 'k') > >> %time K.fraction_field() > >> CPU times: user 0.10 s, sys: 0.00 s, total: 0.10 s > >> Wall time: 0.10 s > > > > Okay, this one does pretty much nothing as far as I can tell except for > > checking that Idl is prime. This check could/should be specialised for > this > > type of input. > > > > Am I right in assuming that I = <f_1, ..., f_m> with all f_i irreducible > and > > <f_i> \intersect <f_j> = \empty then I is a prime ideal? > > NO! If f1 and f2 define the same extension field then <f1,f2> will > not be prime, e.g. f1=x^2-2 and f2=x^2-8 over QQ. > > John > > > > >> and with NumberField: > >> > >> m = 3*5*7 > >> pi = prime_factors(m) > >> Idl = [cyclotomic_polynomial(p) for p in pi] > >> %time NumberField(Idl, 'k', check=False) > >> CPU times: user 2.30 s, sys: 0.01 s, total: 2.31 s > >> Wall time: 2.30 s > > > > Running > > > > sage: %prun NumberField(Idl, 'k', check=False) > > > > 4 1.761 0.440 1.761 0.440 > > number_field_rel.py:1034(_rnfeltreltoabs) > > > > this is because we're building a tower of number fields: > > > > def NumberFieldTower(v, names, check=True, embeddings=None): > > if len(v) == 0: > > return QQ > > if len(v) == 1: > > return NumberField(v[0], names=names, embedding=embeddings[0]) > > f = v[0] > > w = NumberFieldTower(v[1:], names=names[1:], > embeddings=embeddings[1:]) > > if isinstance(f, polynomial_element.Polynomial): > > var = f.variable_name() > > else: > > var = 'x' > > > > name = names[0] > > R = w[var] # polynomial ring > > > > f = R(f) > > i = 0 > > > > sep = chr(ord(name[0]) + 1) > > return w.extension(f, name, check=check, embedding=embeddings[0]) > > > > The last line of this code in number_field.py consumes all the time. I > don't > > know what could be done here. > > > >> Now try to play with prime factors in m (e.g. m = 5*7*11 or m = > 7*11*13), > >> it becomes uncomputable quickly with both... > > > > > > Cheers, > > Martin > -- You received this message because you are subscribed to the Google Groups "sage-devel" group. To unsubscribe from this group and stop receiving emails from it, send an email to sage-devel+unsubscr...@googlegroups.com. To post to this group, send email to sage-devel@googlegroups.com. Visit this group at http://groups.google.com/group/sage-devel. For more options, visit https://groups.google.com/d/optout.