114 if (a < b)
return -1;
177 int b =
static_cast<int>(mpz_fdiv_ui(a,
p));
238 return (t <=
p ? t : t -
p);
244 return (t < 0 ? t +
p : t);
267 if (a != 0 && b != 0)
302 else if (n > 0)
result = 0;
311 int n1 =
static_cast<int>(mpz_fdiv_ui(n,
p1));
333 bool p_parens =
false)
const;
357 if (n >
p / 2) n -=
p;
Shared base of the aring framework (namespace M2) that unifies the engine's coefficient rings.
Append-only GC-backed byte buffer used throughout the engine for text output.
void swap(ElementType &a, ElementType &b) const
void syzygy(ElementType a, ElementType b, ElementType &x, ElementType &y) const
static int findPrimitiveRoot(int P)
ElementType from_ring_elem_const(const ring_elem &a) const
void set_from_long(elem &result, long a) const
void negate(elem &result, elem a) const
int modulus_add(int a, int b, int p) const
void invert(elem &result, elem a) const
void mult(elem &result, elem a, elem b) const
void set(elem &result, elem a) const
size_t characteristic() const
unsigned int computeHashValue(const elem &a) const
void subtract(elem &result, elem a, elem b) const
void init(elem &result) const
void init_set(elem &result, elem a) const
static void clear(elem &result)
void add(elem &result, elem a, elem b) const
void set_zero(elem &result) const
void elem_text_out(buffer &o, ElementType a, bool p_one=true, bool p_plus=false, bool p_parens=false) const
void set_from_mpz(elem &result, mpz_srcptr a) const
static const RingID ringID
size_t cardinality() const
void to_ring_elem(ring_elem &result, const ElementType &a) const
bool is_zero(ElementType f) const
void from_ring_elem(ElementType &result, const ring_elem &a) const
void text_out(buffer &o) const
bool is_equal(ElementType f, ElementType g) const
void power_mpz(elem &result, elem a, mpz_srcptr n) const
bool is_unit(ElementType f) const
std::vector< elem > ElementContainerType
int modulus_sub(int a, int b, int p) const
void subtract_multiple(elem &result, elem a, elem b) const
void divide(elem &result, elem a, elem b) const
long coerceToNonnegativeLongInteger(const elem &f) const
void set_var(elem &result, int v) const
long coerceToLongInteger(const elem &f) const
void power(elem &result, elem a, int n) const
bool set_from_BigReal(elem &result, gmp_RR a) const
void random(ElementType &result) const
int compare_elems(ElementType f, ElementType g) const
bool set_from_mpq(elem &result, mpq_srcptr a) const
void eval(const RingMap *map, const elem f, int first_var, ring_elem &result) const
A base class for simple ARings.
Engine-side ring homomorphism: stores, for each source-ring variable, the target-ring element it maps...
Engine-side Z/p ring for small primes (p < 32767), using a discrete-log (Zech) representation.
namespace exc — internal C++ exception types and the TRY / CATCH macro pair.
VALGRIND_MAKE_MEM_DEFINED & result(result)
int32_t rawRandomInt(int32_t max)
Engine-boundary C API for the engine's PRNG and rational / real / complex random draws.
ring_elem — the universal value type carried by every Ring* in the engine.