You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Computation of isogenies of prime degree p is expensive when the degree
is neither a "genus zero" prime [2,3,5,7,13] or a "hyperelliptic prime"
[11, 17, 19, 23, 29, 31, 41, 47, 59, 71] (for these there is special
code written). In one situation we can save time, after factoring the
degree {{{(p^2-1)/2}}} division polynomial, if there is exactly one
factor of degree (p-1)/2, or one subset of factors whose product has
that degree, then the factor of degree (p-1)/2 must be a kernel
polynomial. Then we do not need to check consistency, which is very
expensive.
The example which led me to this was with p=89 over a quadratic number
field, where E.isogeny_class() was taking days. After the change here
that goes down to 3 hours. (There are 4 curves in the isogeny class and
the code requires factoring the 89-division polynomial of each!) I used
a less extreme example for a doctest: a 37-isogeny.
URL: http://trac.sagemath.org/18589
Reported by: cremona
Ticket author(s): John Cremona
Reviewer(s): Jeroen Demeyer
[Isogeny of degree 43 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 42*x + 42 over Finite Field of size 43 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 36 over Finite Field of size 43]
1908
1908
[Isogeny of degree 47 from Elliptic Curve defined by y^2 + y = x^3 + x^2 + 46*x + 46 over Finite Field of size 47 to Elliptic Curve defined by y^2 + y = x^3 + x^2 + 42*x + 34 over Finite Field of size 47]
1909
1909
1910
+
Note that not all factors of degree (l-1)/2 of the l-division
1911
+
polynomial are kernel polynomials. In this example, the
1912
+
13-division polynomial factors as a product of 14 irreducible
1913
+
factors of degree 6 each, but only two those are kernel
1914
+
polynomials::
1915
+
1916
+
sage: F3 = GF(3)
1917
+
sage: E = EllipticCurve(F3,[0,0,0,-1,0])
1918
+
sage: Psi13 = E.division_polynomial(13)
1919
+
sage: len([f for f,e in Psi13.factor() if f.degree()==6])
1920
+
14
1921
+
sage: len(E.isogenies_prime_degree(13))
1922
+
2
1923
+
1924
+
Over GF(9) the other factors of degree 6 split into pairs of
1925
+
cubics which can be rearranged to give the remaining 12 kernel
0 commit comments