Macaulay2 Engine
Loading...
Searching...
No Matches
ZZp.hpp
Go to the documentation of this file.
1// Copyright 1995 Michael E. Stillman.
2#ifndef _z_mod_p_hh_
3#define _z_mod_p_hh_
4
5#include "ring.hpp"
6#include "coeffrings.hpp"
7namespace M2 {
8class ARingZZp;
9};
10
44
62class Z_mod : public Ring
63{
64 // int P; // this is defined in class Ring
65 int P; // this class only allows char < 32767, so we stash characteristic
66 // here
67 int _P1; // = P-1
68 int _ZERO; // = p-1, log of zero...
69
74
75 int int_to_exp(int a) const;
76
79
80 int to_int(int a) const;
81
82 protected:
83 Z_mod() {}
84 virtual ~Z_mod() {}
85 bool initialize_Z_mod(int p);
86
87 public:
88 static Z_mod *create(int p);
89
90 bool isFinitePrimeField() const { return true; }
91 Z_mod *cast_to_Z_mod() { return this; }
92 const Z_mod *cast_to_Z_mod() const { return this; }
94 M2::ARingZZp *get_ARing() const { return aringZZp; }
95 virtual MutableMatrix *makeMutableMatrix(size_t nrows,
96 size_t ncols,
97 bool dense) const;
98
99 virtual std::pair<bool, long> coerceToLongInteger(ring_elem a) const;
100
101 long discreteLog(const ring_elem &a) const; // returns -1 if a is 0
102
103 // The following are all the routines required by 'ring'
104
105 virtual void text_out(buffer &o) const;
106
107 virtual unsigned int computeHashValue(const ring_elem a) const;
108
109 virtual ring_elem from_long(long n) const;
110 virtual ring_elem from_int(mpz_srcptr n) const;
111 virtual bool from_rational(mpq_srcptr q, ring_elem &result) const;
112
113 virtual bool promote(const Ring *R,
114 const ring_elem f,
115 ring_elem &result) const;
116 virtual bool lift(const Ring *R, const ring_elem f, ring_elem &result) const;
117
118 virtual bool is_unit(const ring_elem f) const;
119 virtual bool is_zero(const ring_elem f) const;
120 virtual bool is_equal(const ring_elem f, const ring_elem g) const;
121 virtual int compare_elems(const ring_elem a, const ring_elem b) const;
122
123 virtual ring_elem copy(const ring_elem f) const;
124 virtual void remove(ring_elem &f) const;
125
126 int internal_negate(int f) const;
127 int internal_add(int f, int g) const;
128 int internal_subtract(int f, int g) const;
129
130 virtual ring_elem negate(const ring_elem f) const;
131 virtual ring_elem add(const ring_elem f, const ring_elem g) const;
132 virtual ring_elem subtract(const ring_elem f, const ring_elem g) const;
133 virtual ring_elem mult(const ring_elem f, const ring_elem g) const;
134 virtual ring_elem power(const ring_elem f, mpz_srcptr n) const;
135 virtual ring_elem power(const ring_elem f, int n) const;
136 virtual ring_elem invert(const ring_elem f) const;
137 virtual ring_elem divide(const ring_elem f, const ring_elem g) const;
138
139 virtual void syzygy(const ring_elem a,
140 const ring_elem b,
141 ring_elem &x,
142 ring_elem &y) const;
143
144 virtual ring_elem random() const;
145
146 virtual void elem_text_out(buffer &o,
147 const ring_elem f,
148 bool p_one = true,
149 bool p_plus = false,
150 bool p_parens = false) const;
151
152 virtual ring_elem eval(const RingMap *map,
153 const ring_elem f,
154 int first_var) const;
155};
156
157#endif
158
159// Local Variables:
160// compile-command: "make -C $M2BUILDDIR/Macaulay2/e "
161// indent-tabs-mode: nil
162// End:
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...
Definition aring-zzp.hpp:67
Abstract base class for mutable matrices over an arbitrary engine Ring, the in-place counterpart of t...
Definition mat.hpp:79
Ring()
Definition ring.hpp:136
xxx xxx xxx
Definition ring.hpp:102
Engine-side ring homomorphism: stores, for each source-ring variable, the target-ring element it maps...
Definition ringmap.hpp:60
virtual ring_elem negate(const ring_elem f) const
Definition ZZp.cpp:230
int P
Definition ZZp.hpp:65
bool initialize_Z_mod(int p)
Definition ZZp.cpp:15
virtual ring_elem mult(const ring_elem f, const ring_elem g) const
Definition ZZp.cpp:245
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.
Definition ZZp.cpp:264
virtual bool is_unit(const ring_elem f) const
Definition ZZp.cpp:187
virtual ~Z_mod()
Definition ZZp.hpp:84
int to_int(int a) const
Definition ZZp.cpp:73
virtual bool from_rational(mpq_srcptr q, ring_elem &result) const
Definition ZZp.cpp:156
virtual ring_elem from_long(long n) const
Definition ZZp.cpp:132
virtual ring_elem invert(const ring_elem f) const
Definition ZZp.cpp:278
virtual void text_out(buffer &o) const
Definition ZZp.cpp:72
int _ZERO
Definition ZZp.hpp:68
bool isFinitePrimeField() const
Definition ZZp.hpp:90
virtual void syzygy(const ring_elem a, const ring_elem b, ring_elem &x, ring_elem &y) const
Definition ZZp.cpp:294
virtual void remove(ring_elem &f) const
Definition ZZp.cpp:203
int internal_negate(int f) const
Definition ZZp.cpp:208
int internal_add(int f, int g) const
Definition ZZp.cpp:214
virtual int compare_elems(const ring_elem a, const ring_elem b) const
Definition ZZp.cpp:194
virtual bool is_zero(const ring_elem f) const
Definition ZZp.cpp:188
M2::ARingZZp * get_ARing() const
Definition ZZp.hpp:94
virtual ring_elem from_int(mpz_srcptr n) const
Definition ZZp.cpp:140
virtual std::pair< bool, long > coerceToLongInteger(ring_elem a) const
Definition ZZp.cpp:80
virtual void elem_text_out(buffer &o, const ring_elem f, bool p_one=true, bool p_plus=false, bool p_parens=false) const
Definition ZZp.cpp:114
virtual unsigned int computeHashValue(const ring_elem a) const
Definition ZZp.cpp:109
virtual ring_elem eval(const RingMap *map, const ring_elem f, int first_var) const
Definition ZZp.cpp:305
M2::ARingZZp * aringZZp
Definition ZZp.hpp:78
int _prim_root
Definition ZZp.hpp:70
const Z_mod * cast_to_Z_mod() const
Definition ZZp.hpp:92
static Z_mod * create(int p)
Definition ZZp.cpp:64
virtual MutableMatrix * makeMutableMatrix(size_t nrows, size_t ncols, bool dense) const
Definition mat.cpp:44
Z_mod * cast_to_Z_mod()
Definition ZZp.hpp:91
CoefficientRingZZp * get_CoeffRing() const
Definition ZZp.hpp:93
virtual ring_elem divide(const ring_elem f, const ring_elem g) const
Definition ZZp.cpp:286
long discreteLog(const ring_elem &a) const
Definition ZZp.cpp:85
virtual bool is_equal(const ring_elem f, const ring_elem g) const
Definition ZZp.cpp:189
virtual bool lift(const Ring *R, const ring_elem f, ring_elem &result) const
Definition ZZp.cpp:176
Z_mod()
Definition ZZp.hpp:83
virtual ring_elem copy(const ring_elem f) const
Definition ZZp.cpp:202
int internal_subtract(int f, int g) const
Definition ZZp.cpp:222
virtual ring_elem add(const ring_elem f, const ring_elem g) const
Definition ZZp.cpp:235
int * _exp_table
Definition ZZp.hpp:72
virtual ring_elem subtract(const ring_elem f, const ring_elem g) const
Definition ZZp.cpp:240
int _P1
Definition ZZp.hpp:67
virtual bool promote(const Ring *R, const ring_elem f, ring_elem &result) const
Definition ZZp.cpp:165
virtual ring_elem random() const
Definition ZZp.cpp:311
int int_to_exp(int a) const
Definition ZZp.cpp:103
int _minus_one
Definition ZZp.hpp:71
int * _log_table
Definition ZZp.hpp:73
CoefficientRingZZp * coeffR
Definition ZZp.hpp:77
Engine-side Z/p ring for small primes (p < 32767), using a discrete-log (Zech) representation.
Definition ZZp.hpp:63
Two SimpleARing-style coefficient adapters: CoefficientRingZZp and CoefficientRingR.
int p
VALGRIND_MAKE_MEM_DEFINED & result(result)
Definition aring-CC.cpp:3
volatile int x
Ring — the legacy abstract base class for every coefficient and polynomial ring.