CPG - Class Polynomial Generator

Overview

CPG is, as its name says, a generator of class polynomials. When this is possible, it also generates data allowing to build the factors over the genus field of the class polynomials (see Factoring Class Polynomials over the Genus Field).

CPG can work with 45 class invariants (they are associated with modular equations Phi[p](X, J)=0 of degree at most 11 on J).

The current alpha version has some limitations:

  • Discriminant -D such that -67108864 < -D < -4
  • Class number h(-D) ≤ 1920
  • Genus number g(-D) ≤ 64
Executable for use under Win XP on 32-bit processors
CPG screenshot


Examples of use
Class polynomial H(x) with real coefficients
D=10707 gcd(D,3)=3 (D mod 8)=3 Invariant=w(43,4) ClassNumber=12 GenusNumber=4 Class polynomial H(x) --------------------- Degree=12 H[12]=1 H[11]=96255480793427752200850 H[10]=5864874876897440085145369138535 H[9]=9833170036265698951668989612850 H[8]=62984656638430167666877068487718635 H[7]=-231983864643816930151840918148079700 H[6]=201728710473087907453984249289242779802 H[5]=-428938165726417503850753857655799365300 H[4]=215332007100121695649686988622880957056635 H[3]=62159037721783979299238387817834805579650 H[2]=68549832164247789904802368641464405226454535 H[1]=2080223620723835597492067643701389411650 H[0]=39959630797262576401 Max(|H[i]|) = |H[2]| (binary size = 146) Binary precision used = 256 Factorization of H(x) over the genus field ------------------------------------------ Degree=3 G=4 F=[-3,-43,-83] A[0]=1 A[1]=129 A[2]=249 A[3]=3569 S[0]=(+ + + +) S[1]=(+ - + -) S[2]=(+ + - -) S[3]=(+ - - +) M[0,0]=52104048811571732877106700 M[1,0]=4587505699938287468007120 M[2,0]=3301959928240388489941680 M[3,0]=872164083441042546807744 M[0,1]=429184477595092415175110 M[1,1]=37787586227948850529040 M[2,1]=27198461140069037570960 M[3,1]=7184072928430813118550 M[0,2]=96255480793427752200850 M[1,2]=8474822530338214020320 M[2,2]=6099943242468820369280 M[3,2]=1611210166909961209410 Max(|M[i,j]|) = |M[0,0]| (binary size = 86) Binary precision used = 160 Checks ------ |H[0]| = 43^12 Computing a random pseudoprime P such that 4P = U^2 + 10707 V^2 P = 31573 U = 173 Computing Q(x), product over Z/P of the factors obtained over the genus field Q(x) = H(x) mod P Computing j-invariant J = 28216 The curve y^2 = x^3 + 16397 x + 17350 has (P + 1 - U) points over Z/P Running times ------------- Computing roots : 0.01s Building polynomial : 0.00s Computing genus field data : 0.00s Checks : 0.00s

Class polynomial H(x) with complex coefficients
D=10707 gcd(D,3)=3 (D mod 8)=3 Invariant=w(19,2) ClassNumber=12 GenusNumber=4 1 + Sqrt(-10707) Working over Z[w] with w = ---------------- 2 "(a,b)" stands for "a + bw" Class polynomial H(x) --------------------- Degree=12 H[12]=(1,0) H[11]=(101974746444,1830729308) H[10]=(390373809693900,11663907218922) H[9]=(13158098980177612,-5047004183016) H[8]=(30002386396053177,-2000834061257519) H[7]=(-663174676485994936,-4135138548373352) H[6]=(-1813935775451547264,64625604667427232) H[5]=(10343793869802709896,158961488406136832) H[4]=(25464547444744026595,-570805738613547562) H[3]=(-48104808034063448852,-1466951223736236084) H[2]=(-94083300950662701612,19381350676289694) H[1]=(-335973763942430164,-1559108129113688) H[0]=(-25860797,-754767) Max = |H[2].a| (binary size = 67) Binary precision used = 192 Factorization of H(x) over the genus field ------------------------------------------ Degree=3 G=4 F=[-3,-43,-83] A[0]=1 A[1]=1/129 A[2]=1/249 A[3]=1/3569 S[0]=(+ + + +) S[1]=(+ - + -) S[2]=(+ + - -) S[3]=(+ - - +) M[0,0]=(-1828341300828,21090006132) M[1,0]=(20765965344488,-239536423672) M[2,0]=(28850742465048,-332794722312) M[3,0]=(-109227148111536,1259940483984) M[0,1]=(-93976652660,-13228194016) M[1,1]=(1067369594288,150243402800) M[2,1]=(1482928117872,208737376320) M[3,1]=(-5614275245312,-790266952232) M[0,2]=(101974746444,1830729308) M[1,2]=(-1158210477176,-20793087896) M[2,2]=(-1609134199560,-28888420440) M[3,2]=(6092083755808,109369794616) Max(|M[i,j]|) = |M[3,0].a| (binary size = 47) Binary precision used = 128 Checks ------ Norm(H[0]) = 19^12 Computing a random prime P such that 4P = U^2 + 10707 V^2 P = 38371 U = 239 Computing Q(x), product over Z/P of the factors obtained over the genus field Q(x) = H(x) mod P Computing j-invariant J = 15777 The curve y^2 = x^3 + 13095 x + 24317 has (P + 1 - U) points over Z/P Running times ------------- Computing roots : 0.00s Building polynomial : 0.00s Computing genus field data : 0.00s Checks : 0.00s


Modular equations

Except with Hilbert polynomials, a modular equation is necessary to get the j-invariant of an elliptic curve from a root of a class polynomial. The Phi[p](X, J)'s used by CPG and having a degree on J greater than 1 were computed with the program mueller.exe written by Michael Scott.
The following files contain lists of integers (representing the Phi[p](X, J)'s) that can be read with

  Read(p)
  repeat
    Read(coefficient)
    Read(degree_on_X)
    Read(degree_on_J)
  until (degree_on_X = 0) and (degree_on_J = 0)

Other modular equations (up to Phi[997]) can be found at
ftp://ftp.informatik.tu-darmstadt.de/pub/TI/systems/LiDIA/MOD_EQ/


Changes
v2.0.3 (alpha)
  • Added 6 new class invariants.
v2.0.1 (alpha)
  • Polynomial degrees up to 1920 (instead of 1280).