Macaulay2 Engine
Loading...
Searching...
No Matches

◆ initialize_Z_mod()

bool Z_mod::initialize_Z_mod ( int p)
protected

Definition at line 15 of file ZZp.cpp.

16{
18 P = p;
19
21 int i, j, q, n;
22
23 if (P == 2)
24 _minus_one = 0;
25 else
26 _minus_one = (P - 1) / 2;
27
28 if (P == 2)
29 _prim_root = 1;
30 else
31 {
32 j = 1;
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++)
35 ;
36 _prim_root = i - 1;
37 }
38
39 // cerr << "z_mod_p: creating table for P = " << P << endl;
42 for (i = 0, n = 1; i < P - 1; i++, n = (n * _prim_root) % P)
43 {
44 _log_table[n] = i; // i = log_(base _prim_root)(n)
45 _exp_table[i] = n; // n = (_prim_root)^i
46 }
47 _ZERO = P - 1;
48 _exp_table[_ZERO] = 0;
49 _log_table[0] = _ZERO;
50
51 _P1 = P - 1;
52
53 zeroV = from_long(0);
54 oneV = from_long(1);
56
57 coeffR = new CoefficientRingZZp(P, _log_table, _exp_table);
58 aringZZp = new M2::ARingZZp(P); // WARNING: this uses that the primitive
59 // element is the SAME as computed above!!
60 // Remove this warning once Z_mod is not in existence any longer.
61 return true;
62}
ring_elem minus_oneV
Definition ring.hpp:131
void initialize_ring(long charac, const PolynomialRing *DR=nullptr, const std::vector< int > &heft_vec={})
Definition ring.cpp:30
ring_elem oneV
Definition ring.hpp:130
bool declare_field()
Definition ring.cpp:69
ring_elem zeroV
Definition ring.hpp:129
int P
Definition ZZp.hpp:65
virtual ring_elem from_long(long n) const
Definition ZZp.cpp:132
int _ZERO
Definition ZZp.hpp:68
M2::ARingZZp * aringZZp
Definition ZZp.hpp:78
int _prim_root
Definition ZZp.hpp:70
int * _exp_table
Definition ZZp.hpp:72
int _P1
Definition ZZp.hpp:67
int _minus_one
Definition ZZp.hpp:71
int * _log_table
Definition ZZp.hpp:73
CoefficientRingZZp * coeffR
Definition ZZp.hpp:77
int p
#define newarray_atomic(T, len)
Definition newdelete.hpp:91

References _exp_table, _log_table, _minus_one, _P1, _prim_root, _ZERO, aringZZp, coeffR, Ring::declare_field(), from_long(), Ring::initialize_ring(), Ring::minus_oneV, newarray_atomic, Ring::oneV, P, p, and Ring::zeroV.