17 for (i = 2; (i < P && j < P - 1); i++)
18 for (q = i, j = 1; (q != 1 && j < P); q = (q * i) % P, j++)
34 for (i = 0, n = 1; i <
p - 1; i++, n = (n *
prim_root) %
p)
45 fprintf(stderr,
"char %d primitive %d\n",
p,
prim_root);
46 fprintf(stderr,
"exp: ");
47 for (
int i=0; i<
p; i++)
49 fprintf(stderr,
"\nlog: ");
50 for (
int i=0; i<
p; i++)
52 fprintf(stderr,
"\n");
89 if (p_one || n != 1) o << n;
M2::ARingZZp — portable Z/p for small primes via log / exp tables.
static int findPrimitiveRoot(int P)
size_t characteristic() const
void elem_text_out(buffer &o, ElementType a, bool p_one=true, bool p_plus=false, bool p_parens=false) const
void text_out(buffer &o) const
long coerceToLongInteger(const elem &f) const
void eval(const RingMap *map, const elem f, int first_var, ring_elem &result) const
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...
VALGRIND_MAKE_MEM_DEFINED & result(result)
#define newarray_atomic(T, len)
RingMap — engine representation of a ring homomorphism.