switch conrey->char->fullchar

This commit is contained in:
Pascal 2016-10-07 13:06:05 +02:00
parent 6d9c036783
commit e29ca5d50e
38 changed files with 145 additions and 148 deletions

View file

@ -18,7 +18,6 @@
#define DIRICHLET_INLINE static __inline__
#endif
#include "acb.h"
#include "dlog.h"
#ifdef __cplusplus
@ -74,22 +73,22 @@ ulong dirichlet_ui_conductor(const dirichlet_group_t G, ulong a);
int dirichlet_ui_parity(const dirichlet_group_t G, ulong a);
ulong dirichlet_ui_order(const dirichlet_group_t G, ulong a);
/* elements of the group, keep both number and log */
/* characters, keep both number and log */
typedef struct
{
ulong n; /* number */
ulong * log; /* s.t. prod generators[k]^log[k] = number */
}
dirichlet_conrey_struct;
dirichlet_char_struct;
typedef dirichlet_conrey_struct dirichlet_conrey_t[1];
typedef dirichlet_char_struct dirichlet_char_t[1];
void dirichlet_conrey_init(dirichlet_conrey_t x, const dirichlet_group_t G);
void dirichlet_conrey_clear(dirichlet_conrey_t x);
void dirichlet_conrey_print(const dirichlet_group_t G, const dirichlet_conrey_t x);
void dirichlet_char_init(dirichlet_char_t x, const dirichlet_group_t G);
void dirichlet_char_clear(dirichlet_char_t x);
void dirichlet_char_print(const dirichlet_group_t G, const dirichlet_char_t x);
DIRICHLET_INLINE void
dirichlet_conrey_set(dirichlet_conrey_t x, const dirichlet_group_t G, const dirichlet_conrey_t y)
dirichlet_char_set(dirichlet_char_t x, const dirichlet_group_t G, const dirichlet_char_t y)
{
slong k;
x->n = y->n;
@ -98,38 +97,38 @@ dirichlet_conrey_set(dirichlet_conrey_t x, const dirichlet_group_t G, const diri
}
DIRICHLET_INLINE int
dirichlet_conrey_eq(const dirichlet_conrey_t x, const dirichlet_conrey_t y)
dirichlet_char_eq(const dirichlet_char_t x, const dirichlet_char_t y)
{
return (x->n == y->n);
}
int dirichlet_conrey_eq_deep(const dirichlet_group_t G, const dirichlet_conrey_t x, const dirichlet_conrey_t y);
int dirichlet_conrey_parity(const dirichlet_group_t G, const dirichlet_conrey_t x);
ulong dirichlet_conrey_conductor(const dirichlet_group_t G, const dirichlet_conrey_t x);
ulong dirichlet_conrey_order(const dirichlet_group_t G, const dirichlet_conrey_t x);
int dirichlet_char_eq_deep(const dirichlet_group_t G, const dirichlet_char_t x, const dirichlet_char_t y);
int dirichlet_char_parity(const dirichlet_group_t G, const dirichlet_char_t x);
ulong dirichlet_char_conductor(const dirichlet_group_t G, const dirichlet_char_t x);
ulong dirichlet_char_order(const dirichlet_group_t G, const dirichlet_char_t x);
void dirichlet_conrey_log(dirichlet_conrey_t x, const dirichlet_group_t G, ulong m);
ulong dirichlet_conrey_exp(dirichlet_conrey_t x, const dirichlet_group_t G);
void dirichlet_char_log(dirichlet_char_t x, const dirichlet_group_t G, ulong m);
ulong dirichlet_char_exp(dirichlet_char_t x, const dirichlet_group_t G);
void dirichlet_conrey_index(dirichlet_conrey_t x, const dirichlet_group_t G, ulong j);
ulong dirichlet_index_conrey(const dirichlet_group_t G, const dirichlet_conrey_t x);
void dirichlet_char_index(dirichlet_char_t x, const dirichlet_group_t G, ulong j);
ulong dirichlet_index_char(const dirichlet_group_t G, const dirichlet_char_t x);
void dirichlet_conrey_one(dirichlet_conrey_t x, const dirichlet_group_t G);
void dirichlet_conrey_first_primitive(dirichlet_conrey_t x, const dirichlet_group_t G);
void dirichlet_char_one(dirichlet_char_t x, const dirichlet_group_t G);
void dirichlet_char_first_primitive(dirichlet_char_t x, const dirichlet_group_t G);
int dirichlet_conrey_next(dirichlet_conrey_t x, const dirichlet_group_t G);
int dirichlet_conrey_next_primitive(dirichlet_conrey_t x, const dirichlet_group_t G);
int dirichlet_char_next(dirichlet_char_t x, const dirichlet_group_t G);
int dirichlet_char_next_primitive(dirichlet_char_t x, const dirichlet_group_t G);
void dirichlet_conrey_mul(dirichlet_conrey_t c, const dirichlet_group_t G, const dirichlet_conrey_t a, const dirichlet_conrey_t b);
void dirichlet_conrey_pow(dirichlet_conrey_t c, const dirichlet_group_t G, const dirichlet_conrey_t a, ulong n);
void dirichlet_conrey_primitive(dirichlet_conrey_t y, const dirichlet_group_t G, const dirichlet_conrey_t x, ulong cond);
void dirichlet_char_mul(dirichlet_char_t c, const dirichlet_group_t G, const dirichlet_char_t a, const dirichlet_char_t b);
void dirichlet_char_pow(dirichlet_char_t c, const dirichlet_group_t G, const dirichlet_char_t a, ulong n);
void dirichlet_char_primitive(dirichlet_char_t y, const dirichlet_group_t G, const dirichlet_char_t x, ulong cond);
#define DIRICHLET_CHI_NULL UWORD_MAX
ulong dirichlet_ui_pairing_conrey(const dirichlet_group_t G, const dirichlet_conrey_t a, const dirichlet_conrey_t b);
ulong dirichlet_ui_pairing_char(const dirichlet_group_t G, const dirichlet_char_t a, const dirichlet_char_t b);
ulong dirichlet_ui_pairing(const dirichlet_group_t G, ulong m, ulong n);
void dirichlet_pairing_conrey(acb_t res, const dirichlet_group_t G, const dirichlet_conrey_t a, const dirichlet_conrey_t b, slong prec);
void dirichlet_pairing_char(acb_t res, const dirichlet_group_t G, const dirichlet_char_t a, const dirichlet_char_t b, slong prec);
void dirichlet_pairing(acb_t res, const dirichlet_group_t G, ulong m, ulong n, slong prec);
/* introducing character type */
@ -139,39 +138,39 @@ typedef struct
{
ulong q; /* modulus */
nmod_t order; /* order */
dirichlet_conrey_t x;
dirichlet_char_t x;
ulong * expo; /* reduced exponents ( log[k] * PHI[k] / gcd( ) ) */
int parity; /* 0 for even char, 1 for odd */
ulong conductor;
}
dirichlet_char_struct;
dirichlet_fullchar_struct;
typedef dirichlet_char_struct dirichlet_char_t[1];
typedef dirichlet_fullchar_struct dirichlet_fullchar_t[1];
DIRICHLET_INLINE ulong
dirichlet_char_order(const dirichlet_char_t chi)
dirichlet_fullchar_order(const dirichlet_fullchar_t chi)
{
return chi->order.n;
}
DIRICHLET_INLINE ulong
dirichlet_char_conductor(const dirichlet_char_t chi)
dirichlet_fullchar_conductor(const dirichlet_fullchar_t chi)
{
return chi->conductor;
}
DIRICHLET_INLINE int
dirichlet_char_parity(const dirichlet_char_t chi)
dirichlet_fullchar_parity(const dirichlet_fullchar_t chi)
{
return chi->parity;
}
void dirichlet_char_init(dirichlet_char_t chi, const dirichlet_group_t G);
void dirichlet_char_clear(dirichlet_char_t chi);
void dirichlet_char_print(const dirichlet_group_t G, const dirichlet_char_t chi);
void dirichlet_fullchar_init(dirichlet_fullchar_t chi, const dirichlet_group_t G);
void dirichlet_fullchar_clear(dirichlet_fullchar_t chi);
void dirichlet_fullchar_print(const dirichlet_group_t G, const dirichlet_fullchar_t chi);
DIRICHLET_INLINE void
dirichlet_char_set(dirichlet_char_t chi1, const dirichlet_group_t G, const dirichlet_char_t chi2)
dirichlet_fullchar_set(dirichlet_fullchar_t chi1, const dirichlet_group_t G, const dirichlet_fullchar_t chi2)
{
slong k;
@ -179,51 +178,51 @@ dirichlet_char_set(dirichlet_char_t chi1, const dirichlet_group_t G, const diric
chi1->conductor = chi2->conductor;
chi1->order = chi2->order;
chi1->parity = chi2->parity;
dirichlet_conrey_set(chi1->x, G, chi2->x);
dirichlet_char_set(chi1->x, G, chi2->x);
for (k = 0; k < G->num; k++)
chi1->expo[k] = chi2->expo[k];
}
DIRICHLET_INLINE int
dirichlet_char_eq(const dirichlet_char_t chi1, const dirichlet_char_t chi2)
dirichlet_fullchar_eq(const dirichlet_fullchar_t chi1, const dirichlet_fullchar_t chi2)
{
return (chi1->q == chi2->q && chi1->x->n == chi2->x->n);
}
int dirichlet_char_eq_deep(const dirichlet_group_t G, const dirichlet_char_t chi1, const dirichlet_char_t chi2);
int dirichlet_fullchar_eq_deep(const dirichlet_group_t G, const dirichlet_fullchar_t chi1, const dirichlet_fullchar_t chi2);
DIRICHLET_INLINE int
dirichlet_char_is_principal(const dirichlet_char_t chi)
dirichlet_fullchar_is_principal(const dirichlet_fullchar_t chi)
{
return (chi->x->n == 1);
}
DIRICHLET_INLINE int
dirichlet_char_is_real(const dirichlet_char_t chi)
dirichlet_fullchar_is_real(const dirichlet_fullchar_t chi)
{
return (chi->order.n <= 2);
}
void dirichlet_char(dirichlet_char_t chi, const dirichlet_group_t G, ulong n);
void dirichlet_char_conrey(dirichlet_char_t chi, const dirichlet_group_t G, const dirichlet_conrey_t x);
void dirichlet_char_set_expo(dirichlet_char_t chi, const dirichlet_group_t G);
void dirichlet_char_normalize(dirichlet_char_t chi, const dirichlet_group_t G);
void dirichlet_char_denormalize(dirichlet_char_t chi, const dirichlet_group_t G);
void dirichlet_fullchar(dirichlet_fullchar_t chi, const dirichlet_group_t G, ulong n);
void dirichlet_fullchar_char(dirichlet_fullchar_t chi, const dirichlet_group_t G, const dirichlet_char_t x);
void dirichlet_fullchar_set_expo(dirichlet_fullchar_t chi, const dirichlet_group_t G);
void dirichlet_fullchar_normalize(dirichlet_fullchar_t chi, const dirichlet_group_t G);
void dirichlet_fullchar_denormalize(dirichlet_fullchar_t chi, const dirichlet_group_t G);
void dirichlet_char_mul(dirichlet_char_t chi12, const dirichlet_group_t G, const dirichlet_char_t chi1, const dirichlet_char_t chi2);
void dirichlet_char_primitive(dirichlet_char_t chi0, const dirichlet_group_t G0, const dirichlet_group_t G, const dirichlet_char_t chi);
void dirichlet_fullchar_mul(dirichlet_fullchar_t chi12, const dirichlet_group_t G, const dirichlet_fullchar_t chi1, const dirichlet_fullchar_t chi2);
void dirichlet_fullchar_primitive(dirichlet_fullchar_t chi0, const dirichlet_group_t G0, const dirichlet_group_t G, const dirichlet_fullchar_t chi);
void dirichlet_char_one(dirichlet_char_t chi, const dirichlet_group_t G);
void dirichlet_char_first_primitive(dirichlet_char_t chi, const dirichlet_group_t G);
void dirichlet_fullchar_one(dirichlet_fullchar_t chi, const dirichlet_group_t G);
void dirichlet_fullchar_first_primitive(dirichlet_fullchar_t chi, const dirichlet_group_t G);
int dirichlet_char_next(dirichlet_char_t chi, const dirichlet_group_t G);
int dirichlet_char_next_primitive(dirichlet_char_t chi, const dirichlet_group_t G);
int dirichlet_fullchar_next(dirichlet_fullchar_t chi, const dirichlet_group_t G);
int dirichlet_fullchar_next_primitive(dirichlet_fullchar_t chi, const dirichlet_group_t G);
ulong dirichlet_ui_chi_conrey(const dirichlet_group_t G, const dirichlet_char_t chi, const dirichlet_conrey_t x);
ulong dirichlet_ui_chi(const dirichlet_group_t G, const dirichlet_char_t chi, ulong n);
ulong dirichlet_ui_chi_char(const dirichlet_group_t G, const dirichlet_fullchar_t chi, const dirichlet_char_t x);
ulong dirichlet_ui_chi(const dirichlet_group_t G, const dirichlet_fullchar_t chi, ulong n);
void dirichlet_ui_vec_set_null(ulong *v, const dirichlet_group_t G, slong nv);
void dirichlet_ui_chi_vec_loop(ulong *v, const dirichlet_group_t G, const dirichlet_char_t chi, slong nv);
void dirichlet_ui_chi_vec_primeloop(ulong *v, const dirichlet_group_t G, const dirichlet_char_t chi, slong nv);
void dirichlet_ui_chi_vec(ulong *v, const dirichlet_group_t G, const dirichlet_char_t chi, slong nv);
void dirichlet_ui_chi_vec_loop(ulong *v, const dirichlet_group_t G, const dirichlet_fullchar_t chi, slong nv);
void dirichlet_ui_chi_vec_primeloop(ulong *v, const dirichlet_group_t G, const dirichlet_fullchar_t chi, slong nv);
void dirichlet_ui_chi_vec(ulong *v, const dirichlet_group_t G, const dirichlet_fullchar_t chi, slong nv);
#ifdef __cplusplus
}

View file

@ -12,8 +12,8 @@
#include "dirichlet.h"
void
dirichlet_char(dirichlet_char_t chi, const dirichlet_group_t G, ulong n)
dirichlet_fullchar(dirichlet_fullchar_t chi, const dirichlet_group_t G, ulong n)
{
dirichlet_conrey_log(chi->x, G, n);
dirichlet_char_conrey(chi, G, NULL);
dirichlet_char_log(chi->x, G, n);
dirichlet_fullchar_char(chi, G, NULL);
}

View file

@ -12,8 +12,8 @@
#include "dirichlet.h"
void
dirichlet_char_clear(dirichlet_char_t chi)
dirichlet_fullchar_clear(dirichlet_fullchar_t chi)
{
dirichlet_conrey_clear(chi->x);
dirichlet_char_clear(chi->x);
flint_free(chi->expo);
}

View file

@ -14,19 +14,19 @@
/* char n has exponents = log[k]*PHI[k] / gcd and order expo / gcd
* so that log = expo[k] */
void
dirichlet_char_conrey(dirichlet_char_t chi, const dirichlet_group_t G, const dirichlet_conrey_t x)
dirichlet_fullchar_char(dirichlet_fullchar_t chi, const dirichlet_group_t G, const dirichlet_char_t x)
{
/* assume chi->x already set if x == NULL */
if (x == NULL)
x = chi->x;
else
dirichlet_conrey_set(chi->x, G, x);
dirichlet_char_set(chi->x, G, x);
chi->q = G->q;
chi->parity = dirichlet_conrey_parity(G, x);
chi->conductor = dirichlet_conrey_conductor(G, x);
chi->parity = dirichlet_char_parity(G, x);
chi->conductor = dirichlet_char_conductor(G, x);
dirichlet_char_set_expo(chi, G);
dirichlet_fullchar_set_expo(chi, G);
/* optional: divide by gcd to obtain true order */
dirichlet_char_normalize(chi, G);
dirichlet_fullchar_normalize(chi, G);
}

View file

@ -12,9 +12,9 @@
#include "dirichlet.h"
int
dirichlet_char_eq_deep(const dirichlet_group_t G, const dirichlet_char_t chi1, const dirichlet_char_t chi2)
dirichlet_fullchar_eq_deep(const dirichlet_group_t G, const dirichlet_fullchar_t chi1, const dirichlet_fullchar_t chi2)
{
dirichlet_conrey_t x, y;
dirichlet_char_t x, y;
if (chi1->q != chi2->q)
return 0;
@ -25,13 +25,13 @@ dirichlet_char_eq_deep(const dirichlet_group_t G, const dirichlet_char_t chi1, c
if (chi1->conductor != chi2->conductor)
return 0;
if (!dirichlet_conrey_eq_deep(G, chi1->x, chi2->x))
if (!dirichlet_char_eq_deep(G, chi1->x, chi2->x))
return 0;
x->n = y->n = 1;
x->log = chi1->expo;
y->log = chi2->expo;
if (!dirichlet_conrey_eq_deep(G, x, y))
if (!dirichlet_char_eq_deep(G, x, y))
return 0;
return 1;

View file

@ -12,9 +12,9 @@
#include "dirichlet.h"
void
dirichlet_char_first_primitive(dirichlet_char_t chi, const dirichlet_group_t G)
dirichlet_fullchar_first_primitive(dirichlet_fullchar_t chi, const dirichlet_group_t G)
{
dirichlet_conrey_first_primitive(chi->x, G);
dirichlet_char_conrey(chi, G, NULL);
dirichlet_char_normalize(chi, G);
dirichlet_char_first_primitive(chi->x, G);
dirichlet_fullchar_char(chi, G, NULL);
dirichlet_fullchar_normalize(chi, G);
}

View file

@ -12,10 +12,10 @@
#include "dirichlet.h"
void
dirichlet_char_init(dirichlet_char_t chi, const dirichlet_group_t G)
dirichlet_fullchar_init(dirichlet_fullchar_t chi, const dirichlet_group_t G)
{
slong k;
dirichlet_conrey_init(chi->x, G);
dirichlet_char_init(chi->x, G);
chi->expo = flint_malloc(G->num * sizeof(ulong));
chi->q = G->q;
chi->conductor = 1;

View file

@ -12,8 +12,8 @@
#include "dirichlet.h"
void
dirichlet_char_mul(dirichlet_char_t chi12, const dirichlet_group_t G, const dirichlet_char_t chi1, const dirichlet_char_t chi2)
dirichlet_fullchar_mul(dirichlet_fullchar_t chi12, const dirichlet_group_t G, const dirichlet_fullchar_t chi1, const dirichlet_fullchar_t chi2)
{
dirichlet_conrey_mul(chi12->x, G, chi1->x, chi2->x);
dirichlet_char_conrey(chi12, G, NULL);
dirichlet_char_mul(chi12->x, G, chi1->x, chi2->x);
dirichlet_fullchar_char(chi12, G, NULL);
}

View file

@ -12,11 +12,11 @@
#include "dirichlet.h"
int
dirichlet_char_next(dirichlet_char_t chi, const dirichlet_group_t G)
dirichlet_fullchar_next(dirichlet_fullchar_t chi, const dirichlet_group_t G)
{
int k;
k = dirichlet_conrey_next(chi->x, G);
dirichlet_char_conrey(chi, G, NULL);
k = dirichlet_char_next(chi->x, G);
dirichlet_fullchar_char(chi, G, NULL);
/* return last index modified */
return k;
}

View file

@ -12,11 +12,11 @@
#include "dirichlet.h"
int
dirichlet_char_next_primitive(dirichlet_char_t chi, const dirichlet_group_t G)
dirichlet_fullchar_next_primitive(dirichlet_fullchar_t chi, const dirichlet_group_t G)
{
int k;
k = dirichlet_conrey_next_primitive(chi->x, G);
dirichlet_char_conrey(chi, G, NULL);
k = dirichlet_char_next_primitive(chi->x, G);
dirichlet_fullchar_char(chi, G, NULL);
/* return last index modified */
return k;
}

View file

@ -12,7 +12,7 @@
#include "dirichlet.h"
void
dirichlet_char_set_expo(dirichlet_char_t chi, const dirichlet_group_t G)
dirichlet_fullchar_set_expo(dirichlet_fullchar_t chi, const dirichlet_group_t G)
{
slong k;
for (k = 0; k < G->num; k++)
@ -21,7 +21,7 @@ dirichlet_char_set_expo(dirichlet_char_t chi, const dirichlet_group_t G)
}
void
dirichlet_char_normalize(dirichlet_char_t chi, const dirichlet_group_t G)
dirichlet_fullchar_normalize(dirichlet_fullchar_t chi, const dirichlet_group_t G)
{
ulong k, g;
g = G->expo;
@ -36,7 +36,7 @@ dirichlet_char_normalize(dirichlet_char_t chi, const dirichlet_group_t G)
}
void
dirichlet_char_denormalize(dirichlet_char_t chi, const dirichlet_group_t G)
dirichlet_fullchar_denormalize(dirichlet_fullchar_t chi, const dirichlet_group_t G)
{
ulong k, g;
g = G->expo / chi->order.n;

View file

@ -12,10 +12,10 @@
#include "dirichlet.h"
void
dirichlet_char_one(dirichlet_char_t chi, const dirichlet_group_t G)
dirichlet_fullchar_one(dirichlet_fullchar_t chi, const dirichlet_group_t G)
{
slong k;
dirichlet_conrey_one(chi->x, G);
dirichlet_char_one(chi->x, G);
chi->q = G->q;
chi->conductor = 1;
chi->parity = 0;

View file

@ -12,13 +12,13 @@
#include "dirichlet.h"
void
dirichlet_char_primitive(dirichlet_char_t chi0, const dirichlet_group_t G0, const dirichlet_group_t G, const dirichlet_char_t chi)
dirichlet_fullchar_primitive(dirichlet_fullchar_t chi0, const dirichlet_group_t G0, const dirichlet_group_t G, const dirichlet_fullchar_t chi)
{
chi0->q = chi->conductor;
chi0->parity = chi->parity;
chi0->conductor = chi->conductor;
dirichlet_conrey_primitive(chi0->x, G, chi->x, chi->conductor);
dirichlet_char_set_expo(chi0, G0);
dirichlet_char_primitive(chi0->x, G, chi->x, chi->conductor);
dirichlet_fullchar_set_expo(chi0, G0);
/* optional: divide by gcd to obtain true order */
dirichlet_char_normalize(chi0, G0);
dirichlet_fullchar_normalize(chi0, G0);
}

View file

@ -12,12 +12,12 @@
#include "dirichlet.h"
void
dirichlet_char_print(const dirichlet_group_t G, const dirichlet_char_t chi)
dirichlet_fullchar_print(const dirichlet_group_t G, const dirichlet_fullchar_t chi)
{
dirichlet_conrey_t x;
dirichlet_char_t x;
flint_printf("chi_%wu(%wu,.) of order %wu, parity %wd, index ", G->q, chi->x->n, chi->order, chi->parity);
dirichlet_conrey_print(G, chi->x);
dirichlet_char_print(G, chi->x);
flint_printf(" and exponents ");
x->log = chi->expo;
dirichlet_conrey_print(G, x);
dirichlet_char_print(G, x);
}

View file

@ -12,12 +12,12 @@
#include "dirichlet.h"
void
dirichlet_conrey_init(dirichlet_conrey_t x, const dirichlet_group_t G) {
dirichlet_char_init(dirichlet_char_t x, const dirichlet_group_t G) {
x->log = flint_malloc(G->num * sizeof(ulong));
dirichlet_conrey_one(x, G);
dirichlet_char_one(x, G);
}
void
dirichlet_conrey_clear(dirichlet_conrey_t x) {
dirichlet_char_clear(dirichlet_char_t x) {
flint_free(x->log);
}

View file

@ -12,7 +12,7 @@
#include "dirichlet.h"
ulong
dirichlet_conrey_conductor(const dirichlet_group_t G, const dirichlet_conrey_t x)
dirichlet_char_conductor(const dirichlet_group_t G, const dirichlet_char_t x)
{
int k, f;
ulong cond = 1;

View file

@ -12,7 +12,7 @@
#include "dirichlet.h"
int
dirichlet_conrey_eq_deep(const dirichlet_group_t G, const dirichlet_conrey_t x, const dirichlet_conrey_t y)
dirichlet_char_eq_deep(const dirichlet_group_t G, const dirichlet_char_t x, const dirichlet_char_t y)
{
slong k;

View file

@ -12,7 +12,7 @@
#include "dirichlet.h"
ulong
dirichlet_conrey_exp(dirichlet_conrey_t x, const dirichlet_group_t G)
dirichlet_char_exp(dirichlet_char_t x, const dirichlet_group_t G)
{
ulong k, n = 1;
for (k = 0; k < G->num; k++)

View file

@ -12,12 +12,12 @@
#include "dirichlet.h"
void
dirichlet_conrey_first_primitive(dirichlet_conrey_t x, const dirichlet_group_t G)
dirichlet_char_first_primitive(dirichlet_char_t x, const dirichlet_group_t G)
{
ulong k;
if (G->q % 4 == 2)
{
flint_printf("Exception (dirichlet_conrey_first_primitive). No primitive element mod %wu.\n",G->q);
flint_printf("Exception (dirichlet_char_first_primitive). No primitive element mod %wu.\n",G->q);
abort();
}
x->n = 1;

View file

@ -26,7 +26,7 @@
#include "dirichlet.h"
void
dirichlet_conrey_index(dirichlet_conrey_t x, const dirichlet_group_t G, ulong j)
dirichlet_char_index(dirichlet_char_t x, const dirichlet_group_t G, ulong j)
{
slong k;
@ -36,5 +36,5 @@ dirichlet_conrey_index(dirichlet_conrey_t x, const dirichlet_group_t G, ulong j)
j = j / G->P[k].phi;
}
dirichlet_conrey_exp(x, G);
dirichlet_char_exp(x, G);
}

View file

@ -16,7 +16,7 @@
/* assume m is invertible */
void
dirichlet_conrey_log(dirichlet_conrey_t x, const dirichlet_group_t G, ulong m)
dirichlet_char_log(dirichlet_char_t x, const dirichlet_group_t G, ulong m)
{
slong k;
/* even part */

View file

@ -12,7 +12,7 @@
#include "dirichlet.h"
void
dirichlet_conrey_mul(dirichlet_conrey_t c, const dirichlet_group_t G, const dirichlet_conrey_t a, const dirichlet_conrey_t b)
dirichlet_char_mul(dirichlet_char_t c, const dirichlet_group_t G, const dirichlet_char_t a, const dirichlet_char_t b)
{
ulong k;
for (k = 0; k < G->num ; k++)

View file

@ -12,7 +12,7 @@
#include "dirichlet.h"
int
dirichlet_conrey_next(dirichlet_conrey_t x, const dirichlet_group_t G)
dirichlet_char_next(dirichlet_char_t x, const dirichlet_group_t G)
{
/* update index */
int k;

View file

@ -12,7 +12,7 @@
#include "dirichlet.h"
int
dirichlet_conrey_next_primitive(dirichlet_conrey_t x, const dirichlet_group_t G)
dirichlet_char_next_primitive(dirichlet_char_t x, const dirichlet_group_t G)
{
/* update index avoiding multiples of p except for first component
if 8|q */

View file

@ -12,7 +12,7 @@
#include "dirichlet.h"
void
dirichlet_conrey_one(dirichlet_conrey_t x, const dirichlet_group_t G)
dirichlet_char_one(dirichlet_char_t x, const dirichlet_group_t G)
{
ulong k;
for (k = 0; k < G->num ; k++)

View file

@ -12,7 +12,7 @@
#include "dirichlet.h"
ulong
dirichlet_conrey_order(const dirichlet_group_t G, const dirichlet_conrey_t x)
dirichlet_char_order(const dirichlet_group_t G, const dirichlet_char_t x)
{
ulong k, g;
g = G->expo;

View file

@ -12,7 +12,7 @@
#include "dirichlet.h"
int
dirichlet_conrey_parity(const dirichlet_group_t G, const dirichlet_conrey_t x)
dirichlet_char_parity(const dirichlet_group_t G, const dirichlet_char_t x)
{
int k, odd = 0;
for (k = 0; k < G->num; k++)

View file

@ -12,7 +12,7 @@
#include "dirichlet.h"
void
dirichlet_conrey_pow(dirichlet_conrey_t c, const dirichlet_group_t G, const dirichlet_conrey_t a, ulong n)
dirichlet_char_pow(dirichlet_char_t c, const dirichlet_group_t G, const dirichlet_char_t a, ulong n)
{
ulong k;
for (k = 0; k < G->num ; k++)

View file

@ -12,7 +12,7 @@
#include "dirichlet.h"
void
dirichlet_conrey_primitive(dirichlet_conrey_t y, const dirichlet_group_t G, const dirichlet_conrey_t x, ulong cond)
dirichlet_char_primitive(dirichlet_char_t y, const dirichlet_group_t G, const dirichlet_char_t x, ulong cond)
{
slong k, l;

View file

@ -12,7 +12,7 @@
#include "dirichlet.h"
void
dirichlet_conrey_print(const dirichlet_group_t G, const dirichlet_conrey_t x)
dirichlet_char_print(const dirichlet_group_t G, const dirichlet_char_t x)
{
slong k;
if (G->num)

View file

@ -26,7 +26,7 @@
#include "dirichlet.h"
ulong
dirichlet_index_conrey(const dirichlet_group_t G, const dirichlet_conrey_t x)
dirichlet_index_char(const dirichlet_group_t G, const dirichlet_char_t x)
{
slong k;
ulong j = 0;

View file

@ -12,7 +12,7 @@
#include "dirichlet.h"
ulong
dirichlet_ui_chi(const dirichlet_group_t G, const dirichlet_char_t chi, ulong n)
dirichlet_ui_chi(const dirichlet_group_t G, const dirichlet_fullchar_t chi, ulong n)
{
if (n_gcd(G->q, n) > 1)
{
@ -21,13 +21,13 @@ dirichlet_ui_chi(const dirichlet_group_t G, const dirichlet_char_t chi, ulong n)
else
{
ulong v;
dirichlet_conrey_t x;
dirichlet_conrey_init(x, G);
dirichlet_conrey_log(x, G, n);
dirichlet_char_t x;
dirichlet_char_init(x, G);
dirichlet_char_log(x, G, n);
v = dirichlet_ui_chi_conrey(G, chi, x);
v = dirichlet_ui_chi_char(G, chi, x);
dirichlet_conrey_clear(x);
dirichlet_char_clear(x);
return v;
}
}

View file

@ -12,7 +12,7 @@
#include "dirichlet.h"
ulong
dirichlet_ui_chi_conrey(const dirichlet_group_t G, const dirichlet_char_t chi, const dirichlet_conrey_t x)
dirichlet_ui_chi_char(const dirichlet_group_t G, const dirichlet_fullchar_t chi, const dirichlet_char_t x)
{
ulong v = 0, k;

View file

@ -12,7 +12,7 @@
#include "dirichlet.h"
void
dirichlet_ui_chi_vec(ulong *v, const dirichlet_group_t G, const dirichlet_char_t chi, slong nv)
dirichlet_ui_chi_vec(ulong *v, const dirichlet_group_t G, const dirichlet_fullchar_t chi, slong nv)
{
if (2 * nv > G->q)
dirichlet_ui_chi_vec_loop(v, G, chi, nv);

View file

@ -13,21 +13,21 @@
/* loop over whole group */
void
dirichlet_ui_chi_vec_loop(ulong *v, const dirichlet_group_t G, const dirichlet_char_t chi, slong nv)
dirichlet_ui_chi_vec_loop(ulong *v, const dirichlet_group_t G, const dirichlet_fullchar_t chi, slong nv)
{
int j;
ulong t;
slong k;
dirichlet_conrey_t x;
dirichlet_conrey_init(x, G);
dirichlet_conrey_one(x, G);
dirichlet_char_t x;
dirichlet_char_init(x, G);
dirichlet_char_one(x, G);
for (k = 0; k < nv; k++)
v[k] = DIRICHLET_CHI_NULL;
t = v[1] = 0;
while ( (j = dirichlet_conrey_next(x, G)) >= 0 )
while ( (j = dirichlet_char_next(x, G)) >= 0 )
{
/* exponents were modified up to j */
for (k = G->num - 1; k >= j; k--)
@ -44,5 +44,5 @@ dirichlet_ui_chi_vec_loop(ulong *v, const dirichlet_group_t G, const dirichlet_c
for (k = G->q; k < nv ; k++ )
v[k] = v[k - G->q];
dirichlet_conrey_clear(x);
dirichlet_char_clear(x);
}

View file

@ -12,7 +12,7 @@
#include "dirichlet.h"
static void
chi_vec_evenpart(ulong *v, const dirichlet_group_t G, const dirichlet_char_t chi, slong nv)
chi_vec_evenpart(ulong *v, const dirichlet_group_t G, const dirichlet_fullchar_t chi, slong nv)
{
ulong c3, c4, x;
@ -47,7 +47,7 @@ chi_vec_evenpart(ulong *v, const dirichlet_group_t G, const dirichlet_char_t chi
/* loop over primary components */
void
dirichlet_ui_chi_vec_primeloop(ulong *v, const dirichlet_group_t G, const dirichlet_char_t chi, slong nv)
dirichlet_ui_chi_vec_primeloop(ulong *v, const dirichlet_group_t G, const dirichlet_fullchar_t chi, slong nv)
{
slong k, l;

View file

@ -15,20 +15,20 @@ ulong
dirichlet_ui_pairing(const dirichlet_group_t G, ulong m, ulong n)
{
ulong x;
dirichlet_conrey_t a, b;
dirichlet_char_t a, b;
if (n_gcd(G->q, m) > 1 || n_gcd(G->q, n) > 1)
return DIRICHLET_CHI_NULL;
dirichlet_conrey_init(a, G);
dirichlet_conrey_init(b, G);
dirichlet_conrey_log(a, G, m);
dirichlet_conrey_log(b, G, n);
dirichlet_char_init(a, G);
dirichlet_char_init(b, G);
dirichlet_char_log(a, G, m);
dirichlet_char_log(b, G, n);
x = dirichlet_ui_pairing_conrey(G, a, b);
x = dirichlet_ui_pairing_char(G, a, b);
dirichlet_conrey_clear(a);
dirichlet_conrey_clear(b);
dirichlet_char_clear(a);
dirichlet_char_clear(b);
return x;
}

View file

@ -13,10 +13,8 @@
#include "dirichlet.h"
/* todo: modular arithmetic */
ulong
dirichlet_ui_pairing_conrey(const dirichlet_group_t G, const dirichlet_conrey_t a, const dirichlet_conrey_t b)
dirichlet_ui_pairing_char(const dirichlet_group_t G, const dirichlet_char_t a, const dirichlet_char_t b)
{
ulong x, k;
x = 0;