Permutation Polynomials

Let K be a finite field. A polynomial representing (by the evaluation map) a bijection of K into itself is known as a permutation polynomial. The Dickson polynomials of the first and second kind are permutation polynomials when certain conditions are satisfied.

DicksonFirst(n, a) : RngIntElt, RngElt -> RngUPolElt
Given a positive integer n, this function constructs the Dickson polynomial of the first kind Dn (x, a) of degree n, where Dn (x, a) is defined by Dn(x, a) = ∑i=0⌊n/2 ⌋ (n /(n - i)) ((n - i) choose i) ( - a)i xn - 2i.

DicksonSecond(n, a) : RngIntElt, RngElt -> RngUPolElt
Given a positive integer n, this function constructs the Dickson polynomial of the second kind En (x, a) of degree n, where En (x, a) is defined by En(x, a) = ∑i=0⌊n/2 ⌋ ((n - i) choose (i)) ( - a)i xn - 2i.

IsProbablyPermutationPolynomial(p) : RngUPolElt -> BoolElt
    NumAttempts: RngIntElt              Default: 100
Let p denote a polynomial defined over a finite field K. A probabilistic test is applied to determine whether the mapping on K defined by p is a bijection. The function returns true if the test succeeds for each of n attempts, otherwise false. By default, n is taken to be 100; a different value for n can be specified by use of the parameter NumAttempts.

Example FldFin_Dickson (H22E6)

Let K be a finite field of cardinality q. By a theorem of Nöbauer, the Dickson polynomial of the first kind of degree n is a permutation polynomial for K if and only if (n, q2 - 1)=1. Consider K=GF(16).
> Factorization(16^2 - 1);
[ <3, 1>, <5, 1>, <17, 1> ]

Thus, Dn (x, a) will be a permutation polynomial for K providing that n is coprime to 3, 5 and 17.

> K<w> := GF(16);
> R<x> := PolynomialRing(K);
> a := w^5;
> p1 := DicksonFirst(3, a);
> p1;
x^3 + w^5*x
> #{ Evaluate(p1, x) : x in K };
11
> IsProbablyPermutationPolynomial(p1);
false

So D3 (x, a) is not a permutation polynomial. However, D4 (x, a) is a permutation polynomial:

> p1 := DicksonFirst(4, a);
> p1;
x^7 + w^5*x^5 + x
> #{ Evaluate(p1, x) : x in K };
16
> IsProbablyPermutationPolynomial(p1);
true
V2.28, 13 July 2023