Subject: Genus 2 CM construction for class number 20,016 Dear number theorists, We are pleased to announce the successful construction of a genus 2 hyperelliptic Jacobian over a 128-bit prime field, using the complex multiplication method, for an input CM field of class number 20,016. The computation was performed using the complex analytic method, using the implementation [3], which is described in [2]. Important characteristics of this implementation is the ability to compute theta-constants in quasi-linear complexity in the input size. Earlier work by Dupont was used as a starting point for this project [1]. We are aware of previous existing computation using this method. To our knowledge, the largest of these is for a CM field of class number 530 [4]. The input of the computation is the CM field K given by the defining equation x^4+1357*x^2+3299s. The class group of K has structure Z/2*Z/4*Z/5004. The real quadratic subfield K0 is Q(sqrt(1828253)), whose class number is 2. The Shimura class group C(K) is isomorphic to Z/2*Z/2*Z/5004, and thus has size 20,016. The size of the Shimura class group corresponds to the degree of the irreducible factors (over K0r, the real quadratic subfield of the reflex field Kr of K) of the Igusa class polynomials. The most important part of the computation was the computation of the Igusa class polynomials (H1, \hat H2, \hat H3). These were computed relative to the choice of invariants proposed in [5]. Computing (H1, \hat H2, \hat H3) required computing complex approximations of 10,008 pairs of complex conjugate triples of Igusa invariants, associated to a set of period matrices. The breakdown of the computation times goes as follows. - Computation of the period matrices defined over the reflex field of K: 388 s - First steps of Newton lifting up to precision roughly 2,000,000 bits: 610 s per period matrix (1,700 hours total). - Last two steps of Newton lifting up to precision roughly 8,000,000 bits: 3,040 s per period matrix. 8,451 hours total. 2 days wall-clock time. - Computation of floating point polynomials H1, \hat H2, \hat H3: 3 days wall-clock time. - Recognition of polynomial coefficients as elements of K0r: 980 s per coefficient. 16,350 hours total. 2 days wall-clock time. All computation steps have been performed in parallel over up to several hundreds of CPU cores, to the extent allowed by the constraints of the various steps of the computation. A variety of hardware platforms have been used, the most common being Intel Nehalem-based and Sandy Bridge-based processors with 2 GHz clock frequency (see [3] for details). The uncompressed storage size of the three resulting polynomials in base 10 is about 95 GB. The common denominator of the coefficients of H1 has 8884 distinct prime factors, the largest one being 1506803839. In order to validate the computation, the construction of a genus 2 curve was done. We picked the prime number p=2^128+5399685, and the following Weil number: pi:=2587584949432298*y^3 + 598749326588980*y^2 + 3489110163205995872*y - 17626367557116479015; where y is a root of t^4+1357*t^2+3299; The evaluation of the Igusa class polynomials at a single root of H1 gave a triple of Igusa invariants, to which we applied Mestre's algorithm for reconstructing a curve from its invariants. The hyperelliptic curve obtained has the following equation over GF(p): y^2 = 329105434147215182703081697774190891717*x^5 + 219357712933218699650940059644263138156*x^4 + 94773520721686083389380651745963315116*x^3 + 13612280714446818104030347122109215819*x^2 + 224591198286067822213326173663420732292*x + 62350272396394045327709463978232206155; The complex multiplication theory predicts the cardinal of the Jacobian, which we have been able to validate as being equal to: Norm(1-pi) = 115792089237316195448115714075359184294817543055097597784192266245863261539824 This validation of the computation took roughly 20 minutes, mostly dominated by the input-output time required to reduce the class polynomial modulo p (part of the computation was offloaded to a nearby cluster). All computations have been performed by cmh-1.0, which is programmed in C and pari/gp, and can be freely downloaded. Questions regarding characteristics of the data computed (prime numbers appearing in the denominator, etc) may be directed to the authors. Andreas Enge, Emmanuel Thomé. [1] R. Dupont. Moyenne arithmético-géométrique, suites de Borchardt et applications. Thèse, École Polytechnique, 2006. http://www.lix.polytechnique.fr/Labo/Regis.Dupont/these_soutenance.pdf [2] A. Enge, E. Thomé, Computing class polynomials for abelian surfaces. To appear in Experimental Mathematics, 2014. http://hal.inria.fr/hal-00823745/ [3] A. Enge, E. Thomé, cmh: Computation of Igusa Class Polynomials, version 1.0, 2014. http://cmh.gforge.inria.fr/ [4] T. Houtmann, Complex multiplication in genus 2, 2007. http://tiresias.dyndns-at-home.com/cm/ [5] M. Streng, Complex multiplication of abelian surfaces. PhD thesis, Universiteit Leiden, 2010. http://hdl.handle.net/1887/15572 Verification script in magma: p:=340282366920938463463374607431773611141; A:=1357; B:=3299; K:=GF(p); KP:=PolynomialRing(GF(p)); C:=HyperellipticCurve(329105434147215182703081697774190891717*x^5 + 219357712933218699650940059644263138156*x^4 + 94773520721686083389380651745963315116*x^3 + 13612280714446818104030347122109215819*x^2 + 224591198286067822213326173663420732292*x + 62350272396394045327709463978232206155); J:=Jacobian(C); ZP:=PolynomialRing(Integers()); K:=NumberField(t^4+A*t^2+B); pi:=2587584949432298*y^3 + 598749326588980*y^2 + 3489110163205995872*y - 17626367557116479015; assert Norm(pi) eq p^2; assert IsZero(Integers()!Norm(1-pi)*Random(J)); chi:=CharacteristicPolynomial(pi); s1:=-Coefficient(chi,3); s2:=Coefficient(chi,2); assert Coefficient(chi,1) eq -p*s1; assert Coefficient(chi,0) eq p^2; /* The curve C has p+1-s1 points over GF(p) */ assert IsZero(Discriminant(ZP!chi) mod Discriminant(MaximalOrder(K))); J`EulerFactor:=ReciprocalPolynomial(chi); J`Order:=Norm(1-pi); /* base-extend to GF(p^3), for a check */ n:=3; Jn:=BaseChange(J,n); ZP1:=PolynomialRing(Integers()); ZP2:=PolynomialRing(ZP1); E1:=ZP1!J`EulerFactor; E:=Evaluate(E1,ZP2.1); P:=ZP2.1^n-ZP1.1; En:=Resultant(E,P); assert(IsZero(Evaluate(En,1)*Random(Jn))); Jn`EulerFactor:=En; Jn`Order:=Evaluate(En,1);