"Source: Text/Geometry/CrvEllFldFin.text";
"Line: 1325";
"Date: Tue Jun  7 22:27:14 2016";
"Main: Fri Sep 26 14:29:19 2025";
// original file: Text/Geometry/CrvEllFldFin.text, line: 1325
// Example: H132E9 ()
print "Example: H132E9";
ei := GetEchoInput();
SetEchoInput(true);
K<w> := FiniteField(2, 155);
k := FiniteField(2, 5);
Embed(k, K);
b :=  w^154 + w^152 + w^150 + w^146 + w^143 + w^142 + w^141 +
   w^139 + w^138 + w^137 + w^136 + w^134 + w^133 + w^132 + w^131 +
   w^127 + w^125 + w^123 + w^121 + w^117 + w^116 + w^115 + w^112 +
   w^111 + w^109 + w^108 + w^107 + w^105 + w^104 + w^102 + w^101 +
   w^100 + w^99 + w^98 + w^97 + w^95 + w^90 + w^89 + w^88 + w^85 +
   w^83 + w^81 + w^80 + w^79 + w^78 + w^76 + w^75 + w^73 + w^72 +
   w^69 + w^68 + w^62 + w^61 + w^59 + w^54 + w^52 + w^47 + w^45 +
   w^44 + w^43 + w^40 + w^39 + w^37 + w^36 + w^34 + w^32 + w^31 +
   w^25 + w^15 + w^13 + w^10 + w^8 + w^7 + w^6;
E := EllipticCurve([K| 1, 0, 0, b, 0]);
C,div_map := WeilDescent(E, k, K!1);
C;
ptE := Points(E, w^2)[1];
ord := Order(ptE);
ord;
assert $1 eq 142724769270595988105829091515089019330391026;
ptJ := div_map(ptE); // point on Jacobian(C)
// check that order ptJ on J = order ptE on E
J := Jacobian(C);
ord*ptJ eq J!0;
assert $1;
[ (ord div p[1])*ptJ eq J!0 : p in Factorization(ord) ];
SetEchoInput(ei);
