Factorisation de polynômes à une variable 1 Décomposition sans

publicité
Université de Nice Sophia Antipolis
Préparation à l’ Agrégation de Mathématiques
2010-2011
Factorisation de polynômes à une variable
On dispose d’algorithmes pour décomposer un polynôme en facteurs irréductibles
• dans Z[X], c’est ce que nous allons voir, et du coup dans Q[X] (lemme de Gauss)
• dans Fp [X], p premier
• dans Q(α1 , . . . , αn )[X] où Q(α1 , . . . , αn ) est une extension algébrique de Q.
On ne peut pas résoudre ce problème en général dans R[X] ou C[X] (théorie de Galois).
Les propositions ci-dessous constituent un menu à la carte.
Il serait intéressant que vos fonctions affichent une trace des étapes importantes de l’algorithme.
1
Décomposition sans facteur multiple
Programmer l’algorithme de décomposition d’un polynôme P en produit de polynômes sans
facteurs multiples P = P1 P22 . . . Pkk où les Pi sont sans facteur multiple et premiers entre eux
• dans Q[X]
• dans Fp [X]
2
Décomposition en facteurs irréductibles dans Fp[X]
On utilise la méthode de Berlekamp qui permet d’obtenir la décomposition en facteurs irréductibles d’un polynôme P sans facteur multiple dans Fp [X]. On note B l’application linéaire
de Berlekamp.
Si P n’est pas irréductible
• montrer que si V ∈ Ker(B) non constant alors le calcul des pgcd(P,
Qp−1 V − i) pour i de 0 à
p − 1 donne une décomposition non triviale de P et que P = i=0 pgcd(P, V − i)
• on connaît le nombre de facteurs irréductibles de P : c’est la dimension du noyau de B.
L’étape précédente peut ne pas donner le bon nombre de facteurs, par exemple si p = 2 et
P a plus de deux facteurs c’est obligatoirement le cas. On recommence alors ces calculs
avec d’autres éléments non constants d’une base de Ker(B) et en remplaçant P par la
liste de ses facteurs déjà obtenus. Montrer qu’en fin de compte on aura la décomposition
en facteurs irréductibles du polynôme P .
• programmer cet algorithme
3
3.1
De Fp[X] à Z[X]
Borne de Landau-Mignotte
On peut majorer les racines d’un polynôme en fonction de
P ses coefficients : si r est une racine
de P = X n + an−1 X n−1 + · · · + a0 alors |r| ≤ max(1, n−1
i=0 |ai |), de même on peut borner
les coefficients en fonction des racines (fonctions symétriques) et obtenir ainsi des bornes des
coefficients des facteurs en fonction des coefficients du polynôme factorisé. Mais ces bornes sont
très mauvaises.
On utilise
P la borne, difficile à démontrer, de
P Landau-Mignotte.
Si Q = qi=0 bi X i est un diviseur de P = pi=0 ai X i , polynômes dans Z[X], alors
v
u p
q
X
ap uX 2
ai
|bi | ≤ 2q t
bq
i=0
i=0
3.2
Remontée de Hensel linéaire
Soit P un polynôme unitaire dans Z[X] qui se décompose en deux facteurs irréductibles distincts
dans Fp [X]. Programmer la remontée de Hensel qui permet à partir de cette factorisation
modulo p d’en calculer une modulo p2 , p3 , . . . , pk jusqu’à ce que pk soit supérieur à deux fois
la borne de Landau-Mignotte. En déduire la factorisation de P dans Z[X]. La fonction mods
de Maple peut vous être utile.
3.3
Remontée de Hensel quadratique
C’est une variante de l’algorithme précédent : à chaque étape on remonte non seulement la
factorisation mais aussi la relation de Bézout entre les deux facteurs. Précédemment une
étape remontait de pi à pi+1 , montrer qu’avec cette variante une étape remonte de pi à p2i .
Programmer cette variante.
3.4
Remontée de Hensel à k facteurs initiaux
Soit P un polynôme unitaire dans Z[X] qui se décompose en facteurs irréductibles distincts
dans Fp [X] mais on ne suppose plus qu’il y en ait seulement deux. Adapter l’algorithme de
remontée de Hensel linéaire pour traiter ce cas plus général.
3.5
Recombinaison
On peut avoir plus de facteurs dans Fp [X] que dans Z[X]. Après remontée on teste les facteurs
obtenus : si ce sont des facteurs de P dans Z[X] on les met de côté. Pour ceux qui restent on
teste les produits deux à deux en les éliminant dès qu’ils constituent un facteur de P dans Z[X]
et en ajoutant ce facteur à la liste des facteurs trouvés. Puis on recommence avec les produits
trois à trois s’il en reste, etc . . .
C’est cette étape qui donne une mauvaise complexité théorique à l’algorithme mais elle intervient suffisamment peu en pratique pour ne pas pénaliser.
3.6
Le coefficient principal
Et si P n’est pas unitaire ? Soit P = an X n + an−1 X n−1 + · · · + a0 .
n
n−1
En faisant le changement de variable an X = x montrer que an−1
+
n P = x + an−1 x
n−2
n−1
an an−2 x
+ · · · + an a0 et qu’on est ainsi ramené à factoriser un polynôme unitaire.
Le défaut de cette méthode est qu’elle fait croître les coefficients et donc la borne de remontée.
En général on commence, quitte à décomposer P dans Z[X], par se ramener à factoriser un
polynôme P primitif et sans facteur multiple, puis on choisit un modulo p qui ne divise pas an
et tel que P reste sans facteur multiple dans Fp [X]. Alors
• on applique la méthode de Berlekamp au polynôme unitaire
P
an
dans Fp [X]
• on applique la remontée de Hensel aux facteurs trouvés en utilisant à chaque étape
P
(mod pi ) au lieu de P
an
• on remonte jusqu’à 2an fois la borne de Landau-Mignotte donnée par P (cf. étape suivante)
• à l’étape finale pour chaque facteur Q trouvé on teste si an Q mod pk (modulo symétrique)
divise P dans Z[X]. Si c’est le cas on met sa partie primitive dans la liste des facteurs
trouvés et on l’élimine des facteurs à tester. On recommence en testant les produits deux
à deux, etc . . .
Téléchargement