Primitive polynomial (field theory)

Revision as of 21:06, 25 May 2024 by imported>Patallurgist (→‎Primitive trinomials: fixed dead link)
(diff) ← Previous revision | Latest revision (diff) | Newer revision → (diff)

Template:Short description Template:For Template:Use American English Template:More citations needed In finite field theory, a branch of mathematics, a primitive polynomial is the minimal polynomial of a primitive element of the finite field Template:Math. This means that a polynomial Template:Math of degree Template:Mvar with coefficients in Template:Math is a primitive polynomial if it is monic and has a root Template:Math in Template:Math such that <math>\{0,1,\alpha, \alpha^2,\alpha^3, \ldots \alpha^{p^m-2}\}</math> is the entire field Template:Math. This implies that Template:Math is a [[primitive root of unity|primitive (Template:Math)-root of unity]] in Template:Math.

PropertiesEdit

ExamplesEdit

Over Template:Math the polynomial Template:Math is irreducible but not primitive because it divides Template:Math: its roots generate a cyclic group of order 4, while the multiplicative group of Template:Math is a cyclic group of order 8. The polynomial Template:Math, on the other hand, is primitive. Denote one of its roots by Template:Mvar. Then, because the natural numbers less than and relatively prime to Template:Math are 1, 3, 5, and 7, the four primitive roots in Template:Math are Template:Mvar, Template:Math, Template:Math, and Template:Math. The primitive roots Template:Mvar and Template:Math are algebraically conjugate. Indeed Template:Math. The remaining primitive roots Template:Math and Template:Math are also algebraically conjugate and produce the second primitive polynomial: Template:Math.

For degree 3, Template:Math has Template:Math primitive elements. As each primitive polynomial of degree 3 has three roots, all necessarily primitive, there are Template:Math primitive polynomials of degree 3. One primitive polynomial is Template:Math. Denoting one of its roots by Template:Mvar, the algebraically conjugate elements are Template:Math and Template:Math. The other primitive polynomials are associated with algebraically conjugate sets built on other primitive elements Template:Math with Template:Mvar relatively prime to 26:

<math>\begin{align}x^3+2x+1 & = (x-\gamma)(x-\gamma^3)(x-\gamma^9)\\

x^3+2x^2+x+1 &= (x-\gamma^5)(x-\gamma^{5\cdot3})(x-\gamma^{5\cdot9}) = (x-\gamma^5)(x-\gamma^{15})(x-\gamma^{19})\\ x^3+x^2+2x+1 &= (x-\gamma^7)(x-\gamma^{7\cdot3})(x-\gamma^{7\cdot9}) = (x-\gamma^7)(x-\gamma^{21})(x-\gamma^{11})\\ x^3+2x^2+1 &= (x-\gamma^{17})(x-\gamma^{17\cdot3})(x-\gamma^{17\cdot9}) = (x-\gamma^{17})(x-\gamma^{25})(x-\gamma^{23}). \end{align}</math>

ApplicationsEdit

Field element representationEdit

Primitive polynomials can be used to represent the elements of a finite field. If α in GF(pm) is a root of a primitive polynomial F(x), then the nonzero elements of GF(pm) are represented as successive powers of α:

<math>

\mathrm{GF}(p^m) = \{ 0, 1= \alpha^0, \alpha, \alpha^2, \ldots, \alpha^{p^m-2} \} . </math>

This allows an economical representation in a computer of the nonzero elements of the finite field, by representing an element by the corresponding exponent of <math>\alpha.</math> This representation makes multiplication easy, as it corresponds to addition of exponents modulo <math>p^m-1.</math>

Pseudo-random bit generationEdit

Primitive polynomials over GF(2), the field with two elements, can be used for pseudorandom bit generation. In fact, every linear-feedback shift register with maximum cycle length (which is Template:Nowrap, where n is the length of the linear-feedback shift register) may be built from a primitive polynomial.<ref>C. Paar, J. Pelzl - Understanding Cryptography: A Textbook for Students and Practitioners</ref>

In general, for a primitive polynomial of degree m over GF(2), this process will generate Template:Nowrap pseudo-random bits before repeating the same sequence.

CRC codesEdit

The cyclic redundancy check (CRC) is an error-detection code that operates by interpreting the message bitstring as the coefficients of a polynomial over GF(2) and dividing it by a fixed generator polynomial also over GF(2); see Mathematics of CRC. Primitive polynomials, or multiples of them, are sometimes a good choice for generator polynomials because they can reliably detect two bit errors that occur far apart in the message bitstring, up to a distance of Template:Nowrap for a degree n primitive polynomial.

Primitive trinomialsEdit

A useful class of primitive polynomials is the primitive trinomials, those having only three nonzero terms: Template:Nowrap. Their simplicity makes for particularly small and fast linear-feedback shift registers.<ref>Template:Cite book</ref> A number of results give techniques for locating and testing primitiveness of trinomials.<ref>Template:Cite journal</ref>

For polynomials over GF(2), where Template:Nowrap is a Mersenne prime, a polynomial of degree r is primitive if and only if it is irreducible. (Given an irreducible polynomial, it is not primitive only if the period of x is a non-trivial factor of Template:Nowrap. Primes have no non-trivial factors.) Although the Mersenne Twister pseudo-random number generator does not use a trinomial, it does take advantage of this.

Richard Brent has been tabulating primitive trinomials of this form, such as Template:Nowrap.<ref>{{#invoke:citation/CS1|citation |CitationClass=web }}</ref><ref>Template:Cite arXiv</ref> This can be used to create a pseudo-random number generator of the huge period Template:NowrapTemplate:Val.

ReferencesEdit

Template:Reflist

External linksEdit

  • {{#invoke:Template wrapper|{{#if:|list|wrap}}|_template=cite web

|_exclude=urlname, _debug, id |url = https://mathworld.wolfram.com/{{#if:PrimitivePolynomial%7CPrimitivePolynomial.html}} |title = Primitive Polynomial |author = Weisstein, Eric W. |website = MathWorld |access-date = |ref = Template:SfnRef }}