The CM software implements the construction of ring class fields of imaginary quadratic number fields and of elliptic curves with complex multiplication via floating point approximations. Additionally it provides an implementation of the fastECPP algorithm for proving primality of integers. It consists of libraries that can be called from within a C program and of executable command line applications. For the implemented algorithms, see A. Enge, The complexity of class polynomial computation via floating point approximations, Mathematics of Computation 78 (266), 2009, pp. 1089–1107.
- Support FLINT version 3.
- Add an upper bound on the permitted class number in ECPP, to avoid choosing discriminants for which class polynomials cannot be computed in reasonable time and with reasonable memory.
Add a binary
ecpp-checkfor checking certificates.
If the environment variable
CM_ECPP_TMPDIRis set, write checkpoint files during the second phase of ECPP while factoring class polynomials. This makes it possible to interrupt and restart the computation.
Version 0.4.1, "Fitzebohnen", released in January 2023, comes with the following new features:
- By choosing ECPP parameters differently, difficult prime numbers should be handled more gracefully. At least a reported difficult step now works reasonably fast. On the downside, certificates become a bit longer (by about 5% in the example), but I think this is set off by the smoother behaviour of the steps.
- The preliminary ECPP step of computing primorials takes a bit less memory in the MPI version.
- When ECPP certificates are output to a file, a second file in Primo format is created automatically.
- ECPP certificate creation uses class field towers unconditionally.
- An optional primality test is carried out before starting ECPP.
- Fix the ECPP code on 32 bit platforms.
- For larger numbers, the BPSW primality test of GMP is replaced by a Miller-Rabin test to base 2.
If the environment variable
CM_ECPP_TMPDIRis set, files that do not change between different invocations of
ecpp-mpiare stored in and read back from that directory.
- New command line options make it possible to compute only the first or only the second phase.
Phase 2 results are stored in any order as they come in, which requires
the file format to change. Checkpoint files ending in
.cert2from previous releases are not compatible.
- Add an optional dependency on FLINT to speed up root finding in the second ECPP phase.
Decrease the trial division bound in
ecpp-mpi, instead also distribute the numbers to be trial divided.
- Backport an improvement to the half gcd from PARI/GP git, which considerably speeds up the Cornacchia steps.
In May 2022, I used the fastECPP implementation included in CM since release 0.4.0 to set up a new primality proof record, showing that the number 1050000+65859 is prime; this is in fact the smallest prime with 50001 digits. The prime certificate can be downloaded in PARI/GP and in Primo format. For more details, see the announcement.