galois.is_irreducible

galois.is_irreducible(poly: Poly) bool

Determines whether the polynomial f(x) over GF(pm) is irreducible.

Parameters
poly: Poly

A polynomial f(x) over GF(pm).

Returns

True if the polynomial is irreducible.

Notes

A polynomial f(x)GF(pm)[x] is reducible over GF(pm) if it can be represented as f(x)=g(x)h(x) for some g(x),h(x)GF(pm)[x] of strictly lower degree. If f(x) is not reducible, it is said to be irreducible. Since Galois fields are not algebraically closed, such irreducible polynomials exist.

This function implements Rabin’s irreducibility test. It says a degree-m polynomial f(x) over GF(q) for prime power q is irreducible if and only if f(x) | (xqmx) and gcd(f(x), xqmix)=1 for 1ik, where mi=m/pi for the k prime divisors pi of m.

References

Examples

# Conway polynomials are always irreducible (and primitive)
In [1]: f = galois.conway_poly(2, 5); f
Out[1]: Poly(x^5 + x^2 + 1, GF(2))

# f(x) has no roots in GF(2), a necessary but not sufficient condition of being irreducible
In [2]: f.roots()
Out[2]: GF([], order=2)

In [3]: galois.is_irreducible(f)
Out[3]: True
In [4]: g = galois.irreducible_poly(2**4, 2, method="random"); g
Out[4]: Poly(x^2 + 8x + 6, GF(2^4))

In [5]: h = galois.irreducible_poly(2**4, 3, method="random"); h
Out[5]: Poly(x^3 + 2x^2 + 11x + 2, GF(2^4))

In [6]: f = g * h; f
Out[6]: Poly(x^5 + 10x^4 + 14x^3 + 9x^2 + 12x + 12, GF(2^4))

In [7]: galois.is_irreducible(f)
Out[7]: False

Last update: Apr 18, 2022