3#ifndef _coeffrings_hpp_
4#define _coeffrings_hpp_
78 return (t <
p ? t : t -
p);
84 return (t < 0 ? t +
p : t);
104 fprintf(stderr,
"char %d\n",
p);
105 fprintf(stderr,
"exp: ");
106 for (
int i=0; i<
p; i++)
108 fprintf(stderr,
"\nlog: ");
109 for (
int i=0; i<
p; i++)
111 fprintf(stderr,
"\n");
125 mpz_init_set_si(tmp,
p);
134 if (n >
p / 2) n -=
p;
238 bool p_parens =
false)
const;
305 for (
size_t i = 0; i < size; i++) ring.
init(
mData[i]);
330 elem tmp =
R->mult(a,b);
359 bool p_parens =
false)
const;
Legacy RingZZ — a Ring-derived integer ring backed by GMP mpz_t.
Shared base of the aring framework (namespace M2) that unifies the engine's coefficient rings.
Element(const CoefficientRingR &ring, const ElementType &value)
Element(const CoefficientRingR &ring)
const ElementType & operator[](size_t idx) const
const ElementType * data() const
ElementType & operator[](size_t idx)
ElementArray(const CoefficientRingR &ring, size_t size)
void to_ring_elem(ring_elem &result, const elem &a) const
void init_set(elem &result, elem a) const
void elem_text_out(buffer &o, ElementType a, bool p_one=true, bool p_plus=false, bool p_parens=false) const
void from_ring_elem(elem &result, const ring_elem &a) const
void subtract_multiple(elem &result, elem a, elem b) const
void clear(elem &result) const
void set_zero(elem &result) const
elem from_ring_elem_const(const ring_elem &a) const
void set_from_mpz(elem &result, mpz_t a) const
bool is_unit(elem f) const
CoefficientRingR(const Ring *R0)
void negate(elem &result, elem a) const
void subtract(elem &result, elem a, elem b) const
void divide(elem &result, elem a, elem b) const
void set(elem &result, elem a) const
void set_from_long(elem &result, long a) const
void add(elem &result, elem a, elem b) const
bool is_zero(elem result) const
void invert(elem &result, elem a) const
typedef VECTOR(elem) ElementContainerType
void init(elem &result) const
void swap(elem &a, elem &b) const
void text_out(buffer &o) const
void mult(elem &result, elem a, elem b) const
bool is_equal(elem a, elem b) const
std::vector< elem > ElementContainerType
void subtract(elem &result, elem a, elem b) const
CoefficientRingZZp(int p0, int *log, int *exps)
void set_from_long(elem &result, long a) const
void negate(elem &result, elem a) const
static void clear(elem &result)
void to_ring_elem(ring_elem &result, const elem a) const
void divide(elem &result, elem a, elem b) const
void init(elem &result) const
void set_zero(elem &result) const
void swap(elem &a, elem &b) const
void set(elem &result, elem a) const
static int modulus_add(int a, int b, int p)
void invert(elem &result, elem a) const
void init_set(elem &result, elem a) const
void set_from_mpz(elem &result, mpz_t a) const
bool is_equal(elem a, elem b) const
void subtract_multiple(elem &result, elem a, elem b) const
void elem_text_out(buffer &o, ElementType a, bool p_one=true, bool p_plus=false, bool p_parens=false) const
void add(elem &result, elem a, elem b) const
void mult(elem &result, elem a, elem b) const
void from_ring_elem(elem &result, const ring_elem &a) const
static int modulus_sub(int a, int b, int p)
bool is_zero(elem result) const
long coerceToLongInteger(const elem &f) const
const ElementType & value() const
A base class for Element.
A base class for simple ARings.
Engine-side Z/p ring for small primes (p < 32767), using a discrete-log (Zech) representation.
VALGRIND_MAKE_MEM_DEFINED & result(result)
ring_elem — the universal value type carried by every Ring* in the engine.