diff options
| author | J08nY | 2018-04-08 17:20:18 +0200 |
|---|---|---|
| committer | J08nY | 2018-04-08 17:20:18 +0200 |
| commit | 13ad6fdecf1067a72c5dd7ae995d890792fda31d (patch) | |
| tree | a342cabaa31cc21b53d209260267280ef0df2c93 /src | |
| parent | d47eb30cf7928093e5677f2ab53f1ec4f02e6e06 (diff) | |
| download | ecgen-13ad6fdecf1067a72c5dd7ae995d890792fda31d.tar.gz ecgen-13ad6fdecf1067a72c5dd7ae995d890792fda31d.tar.zst ecgen-13ad6fdecf1067a72c5dd7ae995d890792fda31d.zip | |
Diffstat (limited to 'src')
| -rw-r--r-- | src/cm/p1363.c | 19 | ||||
| -rw-r--r-- | src/cm/p1363.h | 37 |
2 files changed, 47 insertions, 9 deletions
diff --git a/src/cm/p1363.c b/src/cm/p1363.c index 0485849..fad2a05 100644 --- a/src/cm/p1363.c +++ b/src/cm/p1363.c @@ -134,6 +134,7 @@ static GEN p1363_func_fzero(GEN D, p1363_form_t *form, long precision) { GEN result = gmul(divd, front); + // TODO: WHY???? gel(result, 2) = gneg(gel(result, 2)); return gerepilecopy(ltop, result); @@ -331,15 +332,6 @@ static void p1363_theta(GEN D, p1363_form_t *form, long precision) { form->theta = gerepilecopy(ltop, gexp(quot, precision)); } -/** - * Bit-precision computation for a Weber class polynomial from: - * On the Efficient Generation of Elliptic Curves, - * Elisavet Konstantinou, Yiannis C. Stamatiou, Christos Zaroliagis - * @param D - * @param forms - * @param nforms - * @return The pari precision required for W_D. - */ long p1363_bit_precision(GEN D, p1363_form_t **forms, size_t nforms) { pari_sp ltop = avma; long v0 = 64; @@ -449,3 +441,12 @@ GEN p1363_poly(GEN D, p1363_form_t **forms, size_t nforms) { } return gerepilecopy(ltop, result); } + +GEN p1363_polclass(GEN D) { + pari_sp ltop = avma; + p1363_form_t **forms; + size_t nforms = p1363_forms(D, &forms); + GEN WD = p1363_poly(D, forms, nforms); + p1363_free(&forms, nforms); + return gerepileupto(ltop, WD); +}
\ No newline at end of file diff --git a/src/cm/p1363.h b/src/cm/p1363.h index 7201d80..1064eda 100644 --- a/src/cm/p1363.h +++ b/src/cm/p1363.h @@ -28,14 +28,51 @@ typedef struct { GEN theta; } p1363_form_t; +/** + * Compute all the primitive reduced quadratic forms for a given discriminant. + * @param D + * @param forms + * @return + */ size_t p1363_forms(GEN D, p1363_form_t ***forms); +/** + * Free the computed quadratic forms. + * @param forms + * @param nforms + */ void p1363_free(p1363_form_t ***forms, size_t nforms); +/** + * Compute the class invariant for discriminant D and form. + * @param D + * @param form + * @param precision + * @return + */ GEN p1363_invariant(GEN D, p1363_form_t *form, long precision); +/** + * Bit-precision computation for a Weber class polynomial from: + * On the Efficient Generation of Elliptic Curves, + * Elisavet Konstantinou, Yiannis C. Stamatiou, Christos Zaroliagis + * @param D + * @param forms + * @param nforms + * @return The pari precision required for W_D. + */ long p1363_bit_precision(GEN D, p1363_form_t **forms, size_t nforms); +/** + * Compute the reduced Webe class polynomial for discriminant D and quadratic + * forms. + * @param D + * @param forms + * @param nforms + * @return + */ GEN p1363_poly(GEN D, p1363_form_t **forms, size_t nforms); +GEN p1363_polclass(GEN D); + #endif // ECGEN_CM_P1363_H |
