galois.is_primitive_root

galois.is_primitive_root(g, n)

Determines if g is a primitive root modulo n.

Parameters
g : int

A positive integer that may be a primitive root modulo n.

n : int

A positive integer.

Returns

True if g is a primitive root modulo n.

Return type

bool

Notes

The integer g is a primitive root modulo n if the totatives of n, the positive integers 1a<n that are coprime with n, can be generated by powers of g.

Alternatively said, g is a primitive root modulo n if and only if g is a generator of the multiplicative group of integers modulo n,

(Z/nZ)×={1,g,g2,,gϕ(n)1}

where ϕ(n) is order of the group.

If (Z/nZ)× is cyclic, the number of primitive roots modulo n is given by ϕ(ϕ(n)).

Examples

In [1]: galois.is_primitive_root(2, 7)
Out[1]: False

In [2]: galois.is_primitive_root(3, 7)
Out[2]: True

In [3]: galois.primitive_roots(7)
Out[3]: [3, 5]

Last update: Feb 09, 2022