2 FACTORISATION DE POLYNÔMES SUR DES CORPS FINIS
Remarquons qu’on peut arrêter l’algorithme dès que degfi<2(i+ 1),
parce-que tous les facteurs irréductibles de fiont un degré supérieur ou égal
ài+ 1, et donc dans ce cas, fiest irréductible.
3. Factorisation en degrés égaux (algorithme de
Cantor-Zassenhaus)
Maintenant, voyons la factorisation en degrés égaux, pour factoriser les
polynômes produits par la factorisation en degrés distincts. L’algorithme
décrit ici ne fonctionne que si qest impair.
Lemme 3.1. Soit qune puissance d’un nombre premier impair, et soit S=
(F∗
q)2l’ensemble des carrés de Fq. Alors Sest un sous-groupe de F∗
qd’ordre
(q−1)/2, égal à Kerϕ, où ϕest l’homomorphisme de groupes de F∗
qdans
{±1}qui à aassocie a(q−1)/2.
Soit fun polynôme unitaire de Fq[x]de degré n, et soit dun diviseur de
n, tels que tous les facteurs irréductibles de font degré d. On veut trouver
ces facteurs irréductibles. Il y en a r=n/d. On écrit f=f1. . . fr, où pour
tout i,fiest un polynôme unitaire irréductible de degré rde Fq[x]. On peut
supposer que r≥2, car sinon fest irréductible. Grâce au théorème chinois,
on sait qu’il existe un isomorphisme d’algèbres
χ:R−→ Fq[x]/(f1)×. . . Fq[x]/(fr) = R1× · · · × Rr,
chaque Riétant une extension algébrique de Fqde degré d, donc un corps
fini de cardinal qd. Pour tout élément ade Fq, on note χi(a)l’image de a
dans Ri. Si l’on trouve un polynôme atel que certains χi(a)sont nuls et
d’autres non, alors (a, f)est un diviseur non trivial de f.
Soit e= (qd−1)/2. Pour tout élément αde R∗
i,αe∈ {±1}, chacune des
deux possibilités ayant la même probabilité d’arriver. Si on choisit a∈Fq[x],
de façon aléatoire, avec une loi de probabilité uniforme, premier à fde degré
strictement inférieur à n, alors les χi(a)sont des éléments aléatoires avec des
lois de probabilité uniformes indépendantes de F∗
qd, et εi=χi(ae)∈Riest
égal à 1ou −1, chacun avec une probabilité de 1/2. Ainsi,
χ([ae−1]f)=(ε1−1,...εr−1),
et ae−1décompose f, sauf si ε1=· · · =εr, ce qui arrive avec probabilité
2−r+1 ≤1/2.
On procède de la façon suivante. On choisit a∈Fq[x]de degré inférieur
strictement à nau hasard. Si a∈Fq, on retourne : “Erreur”.
Ensuite, on pose g1=pgcd(a, f). Si g16= 1, on retourne g1: c’est un
facteur non trivial de f.
On calcule b=a(qd−1)/2mod f.
On calcule g2=pgcd(b−1, f). Si g26= 1 et g26=f, alors on retourne g2.
Sinon, on retourne “Erreur”.