galois.FieldArray.multiplicative_order() integer | ndarray

Computes the multiplicative order ord(x) of each element in x.

Returns

An integer array of the multiplicative order of each element in x. The return value is a single integer if the input array x is a scalar.

Raises

ArithmeticError – If zero is provided as an input. The multiplicative order of 0 is not defined. There is no power of 0 that ever results in 1.

Notes

The multiplicative order ord(x)=a of x in GF(pm) is the smallest power a such that xa=1. If a=pm1, a is said to be a generator of the multiplicative group GF(pm)×.

Note, multiplicative_order() should not be confused with order. The former returns the multiplicative order of FieldArray elements. The latter is a property of the field, namely the finite field’s order or size.

Examples

Compute the multiplicative order of each non-zero element of GF(32).

In [1]: GF = galois.GF(3**2, display="poly")

In [2]: x = GF.units; x
Out[2]: 
GF([     1,      2,      α,  α + 1,  α + 2,     2α, 2α + 1, 2α + 2],
   order=3^2)

In [3]: order = x.multiplicative_order(); order
Out[3]: array([1, 2, 8, 4, 8, 8, 8, 4])

In [4]: x ** order
Out[4]: GF([1, 1, 1, 1, 1, 1, 1, 1], order=3^2)

The elements with ord(x)=8 are multiplicative generators of GF(32)×, which are also called primitive elements.

In [5]: GF.primitive_elements
Out[5]: GF([     α,  α + 2,     2α, 2α + 1], order=3^2)