33 for (i = 2; (i <
P && j <
P - 1); i++)
34 for (q = i, j = 1; (q != 1 && j <
P); q = (q * i) %
P, j++)
42 for (i = 0, n = 1; i <
P - 1; i++, n = (n *
_prim_root) %
P)
67 if (!
result->initialize_Z_mod(
p))
return nullptr;
76 if (n >
P / 2) n -=
P;
94 return (t <
p ? t : t -
p);
100 return (t < 0 ? t +
p : t);
129 if (p_one || n != 1) o << n;
134 int m =
static_cast<int>(n %
P);
148 int m =
static_cast<int>(mpz_get_si(
result));
197 if (cmp < 0)
return -1;
198 if (cmp == 0)
return 0;
216 if (g ==
_ZERO)
return f;
217 if (f ==
_ZERO)
return g;
224 if (g ==
_ZERO)
return f;
268 else if (mpz_sgn(n) == 0)
282 if (a == 0)
return 0;
static int modulus_add(int a, int b, int p)
static int modulus_sub(int a, int b, int p)
Legacy RingZZ — a Ring-derived integer ring backed by GMP mpz_t.
static int modulus_add(int a, int b, int p)
static int modulus_sub(int a, int b, int p)
Legacy Z_mod — a Ring-derived Z/p with log / exp tables.
M2::ARingZZp — portable Z/p for small primes via log / exp tables.
Discrete-log Z/p adapter that represents non-zero residues by their exponent index relative to a gene...
aring-style adapter for Z/p using a discrete-log (Zech) representation: every non-zero residue is its...
void initialize_ring(long charac, const PolynomialRing *DR=nullptr, const std::vector< int > &heft_vec={})
virtual ring_elem from_long(long n) const =0
const Ring * get_ring() const
Engine-side ring homomorphism: stores, for each source-ring variable, the target-ring element it maps...
static unsigned int mod_ui(mpz_srcptr n, unsigned int p)
Engine-side ring of integers, backed by GMP mpz_ptr elements.
virtual ring_elem negate(const ring_elem f) const
bool initialize_Z_mod(int p)
virtual ring_elem mult(const ring_elem f, const ring_elem g) const
virtual ring_elem power(const ring_elem f, mpz_srcptr n) const
Exponentiation. This is the default function, if a class doesn't define this.
virtual bool is_unit(const ring_elem f) const
virtual bool from_rational(mpq_srcptr q, ring_elem &result) const
virtual ring_elem from_long(long n) const
virtual ring_elem invert(const ring_elem f) const
virtual void text_out(buffer &o) const
virtual void syzygy(const ring_elem a, const ring_elem b, ring_elem &x, ring_elem &y) const
virtual void remove(ring_elem &f) const
int internal_negate(int f) const
int internal_add(int f, int g) const
virtual int compare_elems(const ring_elem a, const ring_elem b) const
virtual bool is_zero(const ring_elem f) const
virtual ring_elem from_int(mpz_srcptr n) const
virtual std::pair< bool, long > coerceToLongInteger(ring_elem a) const
virtual void elem_text_out(buffer &o, const ring_elem f, bool p_one=true, bool p_plus=false, bool p_parens=false) const
virtual unsigned int computeHashValue(const ring_elem a) const
virtual ring_elem eval(const RingMap *map, const ring_elem f, int first_var) const
static Z_mod * create(int p)
virtual ring_elem divide(const ring_elem f, const ring_elem g) const
long discreteLog(const ring_elem &a) const
virtual bool is_equal(const ring_elem f, const ring_elem g) const
virtual bool lift(const Ring *R, const ring_elem f, ring_elem &result) const
virtual ring_elem copy(const ring_elem f) const
int internal_subtract(int f, int g) const
virtual ring_elem add(const ring_elem f, const ring_elem g) const
virtual ring_elem subtract(const ring_elem f, const ring_elem g) const
virtual bool promote(const Ring *R, const ring_elem f, ring_elem &result) const
virtual ring_elem random() const
int int_to_exp(int a) const
CoefficientRingZZp * coeffR
Engine error-reporting primitives: ERROR, INTERNAL_ERROR, error, error_message.
GBRing and gbvector — the GB-tuned polynomial-ring view used by classical Buchberger code.
VALGRIND_MAKE_MEM_DEFINED & result(result)
Monoid — variable count, naming, grading, and monomial order of a polynomial ring.
#define newarray_atomic(T, len)
int32_t rawRandomInt(int32_t max)
RingMap — engine representation of a ring homomorphism.
Text-formatting helpers layered on buffer: bignum print, line wrapping, M2_gbTrace-gated emit.
mpz_srcptr get_mpz() const