Maˆıtrise d`informatique. Projet 1 Factorisation de polynômes

publicité
Maı̂trise d’informatique. Projet 1
Factorisation de polynômes
François Boulier
Université des Sciences et Technologies de Lille
Laboratoire d’Informatique Fondamentale de Lille
59655 Villeneuve d’Ascq CEDEX
email: [email protected]
http://www.lifl.fr/˜boulier
Vers 1998-1999
Résumé
Le projet consiste à programmer en C++ un algorithme de factorisation complète
sur le corps des nombres rationnels de polynômes en une indéterminée et à coefficients
entiers.
1
MAPLE
Les fonctions à réaliser dans ce projet sont implantées dans le logiciel MAPLE. Les
connaı̂tre peut fortement vous aider à mettre votre programme au point. La commande
maple lance MAPLE en mode texte ; la commande xmaple permet d’utiliser MAPLE à
traver une interface graphique. Je vous conseille le mode texte plus rapide et moins buggé.
La commande expand développe une expression. La commande factor factorise un
polynôme. Notez qu’elle fonctionne non seulement pour des polynômes en une indéterminée
à coefficients entiers mais aussi pour des polynômes en plusieurs indéterminées. La commande gcd calcule le “greatest common divisor” de deux polynômes. Elle aussi s’applique
à des polynômes en plusieurs indéterminées. La commande gcdex permet de calculer une
identité de Bézout entre deux polynômes en une indéterminée. La commande diff permet
de dériver une expression par rapport à une variable.
La version modulaire de la plupart de ces commandes existe aussi. En général, il suffit de
mettre l’initiale de la commande en majuscule et de spécifier le module avec mod. Essayez ?
mod pour la liste des commandes disponibles. L’affectation ‘mod‘ := mods : (utiliser des
accents graves et pas aigus) indique à MAPLE d’utiliser des représentants signés pour les
nombres modulaires.
1
Si vous utilisez la version 5, utilisez le symbole % au lieu du symbole " pour désigner le
résultat de la dernière commande exécutée.
|\^/|
._|\|
|/|_.
\ MAPLE /
<____ ____>
|
> p := expand
Maple V Release 4 (LIFL)
Copyright (c) 1981-1996 by Waterloo Maple Inc. All rights
reserved. Maple and Maple V are registered trademarks of
Waterloo Maple Inc.
Type ? for help.
((x^2 - 1)*(3*x^2 - 2)^2);
6
4
2
p := 9 x - 21 x + 16 x - 4
> factor (p);
2
2
(x - 1) (x + 1) (3 x - 2)
> diff (p, x);
5
3
54 x - 84 x + 32 x
> gcd (p, diff (p, x));
2
3 x - 2
> gcdex (p, diff (p, x), x, ’u’, ’v’);
2
x - 2/3
> u;
2
1/6 - 21/4 x
> v;
17
3
- -- x + 7/8 x
24
> Factor (p) mod 7;
2
2
2 (x + 6) (x + 1) (x + 4)
> ‘mod‘ := mods:
> Factor (p) mod 7;
2
2
2 (x
2
- 3)
(x + 1) (x - 1)
> Gcd (p, diff (p, x)) mod 11;
2
x + 3
> 3 * " mod 11;
2
3 x - 2
3
Factorisation irreductible
dans Z[X]
Factorisation irreductible
Remontee dans Z[X] mod q^k
dans Z[X] mod q de
d’une factorisation irreductible
polynomes "sans carres"
de polynomes "sans carres"
(algorithme de Berlekamp).
(lemme de Hensel).
Pgcd dans Z[X]
Identite de Bezout dans
4
Z[X] mod q
Pgcd dans Z[X] mod q
Identite de Bezout
et pgcd dans Z.
Tests de primalite
dans N
Manipulations elementaires
dans Z.
Un algorithme de factorisation
Factorisation "sans carres"
2
dans Z[X]
L’algorithme que nous allons étudier est essentiellement dû à Berlekamp [1] et Zassenhaus
[17]. Un texte de référence se trouve dans [7, vol. 2, pages 420–441]. Le livre [5] (qui est trop
cher) fournit une présentation très facile à lire. En particulier, on y trouve la plupart des
algorithmes de la bibliothèque standard de MAPLE.
2.1
L’algorithme d’Euclide. Notion de pgcd
Les ensembles Z, Q, Z[X], Q[X], munis de l’addition et de la multiplication habituelles
sont des anneaux. Voir n’importe quel livre d’algèbre pour une définition par exemple [13,
page 162]. Par contre, l’ensemble N des entiers naturels n’est pas un anneau.
Soit A un anneau. Un élément a ∈ A est inversible si il existe ā ∈ A tel que aā = 1.
Dans Z les seuls éléments inversibles sont 1 et −1. Dans Q, tout élément non nul a est
inversible. Son inverse est 1/a.
Un anneau dont tout élément non nul est inversible est un corps. Les anneaux Q, R et C
sont des corps. L’anneau Z n’est pas un corps.
Soient A et B deux anneaux. Une application φ : A → B est un homomorphisme
d’anneaux si φ(a + b) = φ(a) + φ(b) et si φ(a b) = φ(a) φ(b).
Le produit cartésien A × B peut être muni d’une structure d’anneau, appelé anneau
produit en posant pour tous couples (a b), (a′ b′ ) ∈ A × B
(a b) + (a′ b′ ) = (a + a′ , b + b′ ),
(a b) × (a′ b′ ) = (a × a′ , b × b′ ).
L’élément zéro de A × B est le couple (0, 0). L’élément neutre pour la multiplication est le
couple (1, 1).
2.1.1
Divisibilité, Pgcd
Soit A un anneau et a, b deux de ses éléments. On dit que a divise b (noté a | b) s’il existe
un élément c ∈ A tel que b = a c.
Soit A un anneau et a, b deux de ses éléments. Un élément g ∈ A est un pgcd de a et de b
(noté g = a ∧ b) si les deux conditions suivantes sont remplies [10, proposition et définition
1.10, page 35] :
1. g | a et g | b,
2. quel que soit g ′ ∈ A on a [g ′ | a et g ′ | b ⇒ g ′ | g].
¡¡ Le ¿¿ pgcd a ∧ b n’est en général pas unique puisqu’il est défini au produit par un
élément inversible près. Par exemple 3 et −3 sont deux pgcd de 6 et de 9. Par abus de
langage, nous parlerons quand même du pgcd de deux éléments.
Question 1. Montrer que 0 ∧ 0 = 0.
Si A est un corps et a, b ∈ A∗ alors tout g ∈ A∗ est un pgcd de a et de b (en général on
prend a ∧ b = 1). Noter que la définition s’applique aussi bien aux entiers qu’aux polynômes
de Z[X] ou de Q[X].
5
2.1.2
La division euclidienne et l’algorithme d’Euclide
Deux excellents ouvrages de référence : [7, vol. 2] (en Anglais) et [4] (en Français). À
ceux qui s’intéressent aux textes historiques et à l’histoire des algorithmes que nous allons
étudier, je conseille [3]. Si a, b ∈ N avec b 6= 0, il existe un unique couple d’entiers (q, r)
satisfaisant les conditions suivantes. L’entier q est le quotient, l’entier r est le reste de la
division euclidienne de a par b.
1. a = b q + r,
2. r < b.
L’existence dans Z d’un algorithme de division euclidienne fournit un algorithme de calcul
du pgcd g de deux entiers a et b. Il s’agit de l’algorithme d’Euclide qui repose sur les deux
égalités :
1. a ∧ 0 = a,
2. a ∧ b = b ∧ r.
Pour montrer l’égalité numéro 2 il suffit d’établir que, quel que soit g ∈ Z on a g | a et g | b
si et seulement si g | b et g | r. Cet algorithme peut même être étendu pour calculer les
coefficients u et v de ce qu’on appelle une identité de Bézout1 c’est–à–dire deux entiers u
et v tels que
a u + b v = g.
Voici un algorithme récursif qui calcule (u, v, g) à partir de a et de b : si b = 0 alors
(u, v, g) = (1, 0, a) ; si b 6= 0 commencer par calculer u′ , v ′ , g ′ tels que
b u′ + r v ′ = g ′ = b ∧ r = a ∧ b
puis retourner (v ′ , u′ − q v ′ , g ′ ). Il existe (bien sûr) une version itérative de l’algorithme
d’Euclide étendu. Étant donnés deux entiers positifs a, b il s’agit de calculer un vecteur
d’entiers (u1 , u2 , u3 ) tel que
u1 a + u2 b = u3 = a ∧ b.
L’algorithme emploie deux vecteurs auxiliaires (v1 , v2 , v3 ) et (t1 , t2 , t3 ). Invariants de boucle :
t1 a + t2 b = t3 ,
v1 a + v2 b = v3 ,
u1 a + u2 b = u3 .
Initialement, les vecteurs sont initialisés à
(u1 , u2 , u3 ) = (1, 0, a),
(v1 , v2 , v3 ) = (0, 1, b).
Si v3 6= 0, on calcule le quotient q de la division de u3 par v3 puis :
(t1 , t2 , t3 ) = (v1 , v2 , v3 ),
(v1 , v2 , v3 ) = (u1 , u2 , u3 ) − q (v1 , v2 , v3 ),
(u1 , u2 , u3 ) = (t1 , t2 , t3 ).
En fait, on peut gagner beaucoup d’efficacité en supprimant u2 , v2 et t2 . Le coefficient u2 se
retrouve à la fin grâce à l’identité de Bézout : u2 = (u3 − a u1 )/b.
1
cf. [7, vol. 2, page 325] ou [4, page 26]. Pour le texte historique, cf. [2] ou plus facilement [3, pages
139–143].
6
2.1.3
Algorithme binaire
Il existe un algorithme binaire de calcul de a∧b qui est différent de l’algorithme d’Euclide
et plus rapide2 . Il repose sur les égalités suivantes :
1. a ∧ b = 2(a/2 ∧ b/2) si a et b sont pairs,
2. a ∧ b = (a/2 ∧ b) si a est pair et b est impair,
3. a ∧ b = (a − b) ∧ b si a et b sont impairs et a ≥ b.
Question 2. Adapter cet algorithme pour qu’il calcule les coefficients d’une identité de
Bézout entre a et b.
2.2
Calcul modulaire
Soient a, b, n ∈ Z trois entiers (n 6= 0). Les égalités suivantes sont bien connues :
(a + b)
(a b)
mod n = ((a
mod n = ((a
mod n) + (b mod n)) mod n,
mod n) · (b mod n)) mod n.
Ici, a mod n désigne le reste de la division de a par n avec 0 ≤ a mod n < n. Le but de ce
qui suit consiste à donner une définition plus moderne de ce qu’est un modulo.
2.2.1
Anneau Z/nZ
Soit n ≥ 2 un entier naturel. La relation d’équivalence ¡¡ modulo n ¿¿ est définie par :
a ≡ b (mod n) si n | (a − b).
Si a ∈ Z, la classe d’équivalence de a est l’ensemble a mod n = ȧ = {a + k n | k ∈ Z}.
On note Z/(n) ou encore Z/nZ l’ensemble des classes d’équivalence de Z pour la relation
d’équivalence ¡¡ modulo n ¿¿. Cet ensemble comporte exactement n éléments. Exemple.
2
cf. [7, vol. 2, page 321] ou [4]. Le texte historique semble être [15].
7
Z/5Z (detail)
7
2
-3
6
-1
1
-4
5
0
-2
11
19
4
3
13
-12
Proposition 1 Si a ≡ ā (mod n) et b ≡ b̄ (mod n) alors
a + b ≡ ā + b̄ (mod n),
a b ≡ ā b̄ (mod n).
Cette proposition a pour conséquence le principe suivant :
Principe. Dans une somme ou un produit (modulo n), on peut toujours remplacer un
nombre a par un nombre ā tel que a ≡ ā (mod n). On peut vérifier dans Z/5Z par exemple
que
1 = 6
1 = 6
×
×
+
+
3 = −2
3 = 13
k
k
k
k
3 = −12
4 = 19
Autre conséquence de la proposition 1 : il est possible de définir la ¡¡ somme ¿¿ et le ¡¡ produit
¿¿ de deux classes d’équivalence modulo n par
z }|
˙ {
ȧ + ḃ = a + b,
z }|
˙ {
ȧ × ḃ = a × b.
L’ensemble Z/nZ est alors muni d’une structure d’anneau et l’application suivante est un
homomorphisme d’anneaux.
modulo n : Z → Z/nZ
a 7→ ȧ
En pratique, on associe les classes d’équivalences à un de leurs représentants. On peut prendre
par exemple
Z/5Z = {0, 1, 2, 3, 4}
8
ce qui coı̈ncide avec la définition donnée en introduction. Nous utiliserons souvent des
représentants signés
Z/5Z = {0, 1, 2, −2, −1}.
Question 3. Montrer qu’un nombre est divisible par 3 si et seulement si la somme de ses
chiffres en base 10 est divisible par 3.
Question 4. Une suite de 8 bits peut être vue soit comme un entier signé (type int), soit
comme un entier positif ou nul (type unsigned int). Par exemple, la même suite de bits
représente à la fois −1 et 255. Vérifier que −1 ≡ 255 (mod 256). Faire le lien entre ce texte
et la notation des entiers en complément à 2.
2.2.2
Calculs dans Z/nZ
Pour additionner, soustraire et multiplier dans Z/nZ, il suffit d’effectuer l’opération
dans Z puis de prendre le résultat modulo n.
Question 5. Donner les tables d’addition et de multiplication de Z/5Z.
L’algorithme d’Euclide étendu fournit un moyen d’effectuer des divisions dans Z/nZ. En
particulier, il permet de calculer l’inverse d’un élément a ∈ Z/nZ, lorsque cet inverse existe !
Proposition 2 Si a ∈ Z alors a ∧ n = 1 si et seulement si a est inversible dans Z/nZ.
Preuve Dire que a est inversible dans Z/nZ c’est dire qu’il existe u ∈ Z tel que a u = 1
mod n ; en d’autres termes, c’est dire qu’il existe u, v ∈ Z tels que
a u + n v = 1.
Le pgcd de a et de n divise tout entier de la forme a u + n v. Par conséquent, si a ∧ n 6= 1
alors a n’est pas inversible dans Z/nZ.
Si a ∧ n = 1 alors u et v existent et peuvent être calculés par l’algorithme d’Euclide
étendu. L’inverse de a est alors (u mod n).
Corollaire 1 L’anneau Z/nZ est un corps si et seulement si n est un nombre premier.
Question 6. Donner la table des inverses des éléments de Z/7Z. Idem pour Z/9Z.
9
2.2.3
Conversions entre rationnels et nombres modulaires
Soit p/q un nombre rationnel et n un entier naturel tel que q ∧ n = 1. L’inverse q̄ de q
modulo n existe et on peut définir naturellement l’image de p/q modulo n.
p
q
mod n = p q̄
mod n.
L’ensemble des rationnels p/q tels que q ∧ n = 1 forme un anneau (que je note Qn ) : la
somme ou le produit de deux éléments de Qn est encore un élément de Qn . L’application
suivante est encore un homomorphisme d’anneaux.
modulo n : Qn → Z/nZ
p/q 7→ p/q mod n
Par exemple, dans Z/11Z,
1/2 = −5
+
+
2/3 = −3
k
k
7/6 = 3
1/2 = −5
×
×
2/3 = −3
k
k
2/6 = 4
Proposition 3 Soit a ∈ Z/nZ un
pnombre modulaire. Il existe au plus un nombre rationnel
p/q = a mod n tel que |p|, |q| < n/2.
Le problème : étant donné un nombre
a dans Z/nZ déterminer un rationnel p/q équivalent
p
à a modulo n et tels que |p|, |q| < n/2 a été résolu dans [16]. Ce résultat, très utile, semble
paradoxalement assez peu connu.
L’algorithme d’Euclide étendu permet de calculer ce rationnel, lorsqu’il existe.
pIl suffit
de changer le test d’arrêt en arrêtant le calcul dès que v3 = 0 ou |u3 |, |u1| < n/2. Si
on s’arrête parce que p
v3 = 0 c’est que le rationnel recherché n’existe pas. Si on s’arrête
parce que |u3|, |u1| < n/2, il reste à tester si u1 ∧ n = 1. Si c’est le cas, on retourne la
fraction p/q = u3 /u1 sinon, c’est que la conversion est impossible.
Ce qui n’est pas évident, c’est que, si un rationnel p/q satisfaisant la proposition existe
alors l’algorithme ci–dessus le trouve. Une preuve élémentaire3 mais ¡¡ qui n’explique pas ¿¿
se trouve dans [14]. Je n’en connais pas d’autre.
Question 7. La conversion est–elle possible avec l’algorithme binaire (j’avoue que je n’en
sais rien) ?
3
Dans le sens où elle ne repose sur aucun théorème dur.
10
2.2.4
Éviter les overflows
Toutes les fonctions qui effectuent des calculs modulo n peuvent être programmées de
façon que, si n2 peut être stocké dans un entier, alors aucun overflow ne peut se produire.
Cette spécification peut être mise en œuvre en appliquant le principe énoncé plus haut. La
fonction ci–dessous calcule ab (mod n) mais peut provoquer des overflows :
entier puissance (entier a, entier b, entier n)
{
entier i, resultat;
resultat = 1;
for (i = 1; i <= b; i = i + 1)
resultat = resultat * a;
return resultat % n;
}
Comme les modulos commutent avec les sommes et les produits, cette fonction peut être
réécrite en une fonction qui ne provoquera jamais d’overflow :
entier puissance (entier a, entier b, entier n)
{
entier abar, i, resultat;
abar = a % n;
resultat = 1;
for (i = 1; i <= b; i = i + 1)
resultat = (resultat * abar) % n;
return resultat;
}
Question 8. Pourquoi suppose–t–on que n2 (et pas n) peut être codé sur un entier ?
Question 9. Supposons que les entiers soient codés sur 32 bits. Quelle valeur maximale
peut–on prendre pour le module n ?
2.3
Polynômes
Soit A = ad X d + · · · + a0 un polynôme à coefficients dans un anneau A quelconque.
L’entier d est le degré de A. L’entier ad est le coefficient initial (ou encore l’initial ) de A. Le
polynôme A est dit unitaire si son coefficient initial ad = 1.
2.3.1
Polynômes à coefficients entiers
Soit A = ad X d + · · ·+ a0 un polynôme à coefficients entiers. La hauteur de A, notée H(A)
désigne le maximum (en valeur absolue) des coefficients ai . Le contenu de A, noté cont(A)
11
désigne le pgcd des coefficients ai . La partie primitive de A, notée pp(A) = A/ cont(A). Un
polynôme égal à sa partie primitive est dit primitif.
Question 10. Exprimer H(A B) en fonction de d, H(A) et H(B).
2.3.2
Polynômes à coefficients modulo n
On note (Z/nZ)[X] ou encore Z[X]/(n) l’anneau des polynômes à coefficients modulo n.
Question 11. Quelles sont les images de 3X 2 − 8X + 9 et de X 5 − 1 modulo 5 ?
Question 12. Quels sont les éléments de Z[X] dont l’image modulo 5 est X − 1 ?
Pour additionner ou soustraire deux polynômes de (Z/nZ)[X], il suffit d’effectuer cette
opération dans Z puis de prendre le polynôme résultat modulo n. Il n’est pas souhaitable de
faire de même pour la multiplication.
Question 13. Comment programmer la multiplication de deux polynômes à coefficients
modulo n sans provoquer d’overflows ?
2.4
Pgcd de deux polynômes
Le lettre A désigne soit un corps (par exemple A = Q ou A = Z/qZ avec q nombre
premier) soit l’anneau Z des entiers relatifs.
Définition 1 Un polynôme A ∈ A[X] est dit irréductible s’il vérifie les deux conditions
suivantes :
1. A n’est pas inversible,
2. quels que soient B, C ∈ A[X] on a [A = B C ⇒ B ou C est inversible].
Dans le cas où A est un corps, les éléments inversibles de A[X] sont les éléments non nuls
de A ; dans le cas A = Z, les éléments inversibles de A[X] sont ±1.
Question 14. 2X − 2 est–il irréductible dans Z[X] ? dans Q[X] ?
Théorème 1 Tout polynôme A ∈ A[X] se décompose en un produit
A = C F1a1 · · · Fsas
(1)
où C ∈ A[X] est inversible, les Fi sont irréductibles et les ai > 0. Le produit (1) est appelée
la factorisation irréductible de A. Cette factorisation est unique à un produit par des nombres
inversibles près.
Le pgcd A ∧ B de deux polynômes A, B ∈ A[X] est donc une notion bien définie.
12
2.4.1
Division euclidienne de polynômes
Soient A un anneau et A et B deux polynômes de A[X].
A = an X n + · · · + a0 ,
B = bm X m + · · · + b0 .
Si le coefficient initial bm de B est inversible dans A alors la division euclidienne de A par B
est possible. C’est–à–dire qu’il est possible de calculer deux polynômes Q, R ∈ A[X] tels que
A = B Q + R,
deg R < deg B.
Voici un algorithme de calcul de Q et de R en pseudo–code :
fonction division euclidienne(A, B)
début
R := A
Q := 0
tant que deg R ≥ deg B faire
T := (initial(R)/ initial(B)) X (deg R−deg B)
Q := Q + T
R := R − T B
fait
retourner Q et R
fin
Il suffit de poser que deg(0) = −1 et que le coefficient initial d’une constante c ∈ A est égal
à c pour que cet algorithme fonctionne en toute généralité. Le polynôme Q est le quotient,
le polynôme R est le reste de la division euclidienne.
2.5
Pgcd de polynômes à coefficients dans un corps
Dans cette section–ci, on s’intéresse à des polynômes à coefficients dans un corps K.
Si B 6= 0 alors le coefficient initial de B est inversible et la division euclidienne de A par B
est possible. Par conséquent, l’algorithme d’Euclide est disponible dans K[X] et permet de
calculer A ∧ B. De même, l’algorithme d’Euclide étendu permet de calculer une identité de
Bézout entre A et B c’est–à–dire deux polynômes U et V de K[X] tels que
A U + B V = A ∧ B.
Les preuves sont exactement les mêmes que pour les entiers.
Question 15. Trouver deux polynômes U et V de Q[X] tels que U X +V (X 3 +X +1) = 1.
Question 16. Écrire un algorithme de division euclidienne, l’algorithme d’Euclide ainsi
que l’algorithme d’Euclide étendu pour les polynômes de (Z/qZ)[X] où q est un nombre
premier. Faites en sorte que les pgcd calculés soient unitaires.
13
2.6
Pgcd de polynômes à coefficients entiers
Soient A, B ∈ Z[X] deux polynômes à coefficients entiers. On cherche à calculer leur
pgcd G = A ∧ B. La division euclidienne de deux polynômes A, B ∈ Z[X] n’est pas toujours
possible : il n’y a donc pas d’algorithme d’Euclide dans Z[X].
2.6.1
Une méthode naı̈ve
Une façon de calculer G consiste à faire le calcul dans Q[X] puis à multiplier le résultat
par une constante appropriée qui fasse disparaı̂tre les dénominateurs. Cette méthode (naı̈ve)
est justifiée par le théorème suivant, que nous admettrons :
Théorème 2 Soit A un polynôme à coefficients entiers. Si A n’est pas irréductible dans
Q[X] alors A se factorise en un produit A = B C avec B, C ∈ Z[X] et deg B, deg C > 0.
Question 17. Montrer en utilisant le théorème que la méthode naı̈ve de calcul du pgcd
dans Z[X] est fondée.
La méthode naı̈ve n’est pas employée en pratique parce que la taille des coefficients des
restes intermédiaires calculés par l’algorithme d’Euclide dans Q[X] explose.
Un exemple suffit à illustrer ce phénomène4 .
R0
R1
R2
R3
R4
R5
=
=
=
=
=
=
(X − 3)(X 8 + X 6 − 3 X 4 − 3 X 3 − 3 X 2 + 2 X − 5)
(X − 3)(3 X 6 + 5 X 4 − 4 X 2 − 9 X + 21)
5 X 5 − 15 X 4 + 98 X 3 − 294 X 2 + 3 X − 9
2913 X 3 − 8764 X 2 + 223 X − 444
48663391 X 2 − 260344846 X + 343064019
X −3
Question 18. Que représente la figure5 ci–dessous ?
4
Les polynômes ont été multipliés par une constante pour supprimer les dénominateurs puis divisés par
le pgcd de leurs coefficients. En d’autres termes, la croissance des coefficients des restes intermédiaires ne
peut pas davantage être contenue — du moins sans utiliser de méthode modulaire.
5
Indication : ce n’est pas un éléphant avalé par un boa. Et encore moins un chapeau.
14
2.6.2
Une première méthode modulaire
Reprenons l’exemple précédent. Supposons qu’on sache que H(R0 ∧ R1 ) ≤ 3. Alors6 ,
comme 2×3 < 11 on a (R0 ∧R1 ) (mod 11) = R0 ∧R1 . L’idée consiste à exécuter l’algorithme
d’Euclide entre R0 et R1 dans l’anneau (Z/11Z)[X] ce qui nous donne
R0
R1
R2
R3
R4
R5
=
=
=
=
=
=
(X − 3)(X 8 + X 6 − 3 X 4 − 3 X 3 − 3 X 2 + 2 X − 5)
(X − 3)(3 X 6 + 5 X 4 − 4 X 2 + 2 X − 1)
X5 − 3 X4 + 2 X3 + 5 X2 + 5 X − 5
X3 + 4 X2 + 4 X + 2
X2 − 2 X − 3
X −3
En pratique, deux difficultés se posent : lever l’indétermination sur le coefficient initial
et lever l’indétermination sur le degré.
2.6.3
Lever l’indétermination sur le degré
Considérons les polynomes
A = (5X + 1)(X − 1),
B = (5X + 1)(X + 6)
Leur pgcd G = 5X + 1 dans Z[X]. Calculons leur pgcd F dans (Z/qZ)[X] pour différentes
valeurs de q.
A∧B
q
1
(5X + 1)(X + 6)
5X + 1
5 le facteur 5X + 1 disparaı̂t
7 A = B (mod 7)
>7
6
C’est un abus de langage. Plus précisément on a φ((R0 ∧ R1 ) mod 11) = R0 ∧ R1 où φ désigne l’application Z/11Z → Z qui à tout élément a ∈ Z/11Z associe le représentant signé de la classe d’équivalence de a
modulo 11, c’est–à–dire l’unique élément a′ ∈ Z tel que a′ ≡ a (mod 11) et 2 |a′ | < 11.
15
On constate que F = G (mod q) pour presque toutes les valeurs de q mais pas pour toutes.
La proposition suivante permet d’éviter facilement le cas où deg F < deg G.
Proposition 4 Soient A et B deux polynômes de Z[X] et q un nombre premier. Soient
G = A ∧ B et F = (A mod q) ∧ (B mod q). Si q ne divise pas le coefficient initial a de A
ou q ne divise pas le coefficient initial b de B alors
deg F ≥ deg G.
Preuve Le coefficient initial g de G divise a et b. Comme q ne divise pas a ou ne divise
pas b, le nombre q ne divise pas g. Par conséquent deg(G mod q) = deg G.
Le polynôme (G mod q) divise (A mod q) et (B mod q) et donc leur pgcd F . Par
conséquent deg(G mod q) ≤ deg F .
Considérons maintenant la suite des restes calculés par l’algorithme d’Euclide sur A et B
dans Q[X].
R0
R1
R2
R3
=
=
=
=
A,
B,
35X + 7,
0.
Le polynome R2 , non nul dans Q[X], devient nul modulo 7 (on retrouve F = B dans
Z/7Z[X]). On se convainc aisément que deg F = deg G si et seulement si q ne divise aucun
des coefficients initiaux des numérateurs des restes intermédiaires calculés par l’algorithme
d’Euclide dans Q[X]. Un nombre premier q qui divise l’un de ces numérateurs est appelé :
nombre premier ¡¡ malchanceux ¿¿.
Pour deux polynômes A et B fixés, il n’existe qu’un nombre fini de nombres premiers
malchanceux.
On ne connaı̂t pas de moyen simple pour déterminer à l’avance si un nombre premier q
est chanceux mais on peut tester après–coup si c’est le cas : le degré du polynôme F est
supérieur ou égal à celui de G (pour peu qu’on choisisse bien q, cf. proposition 4) or G est le
polynôme de plus grand degré qui divise à la fois A et B. Informellement donc, pour tester
si F = G, il suffit de tester si F divise à la fois A et B dans Z[X]. Sur l’exemple, il suffit de
vérifier que B ne divise pas A pour s’assurer que A ∧ B 6= B.
2.6.4
Lever l’indétermination sur le coefficient initial
On a dit qu’il suffisait de tester que F = (A mod q) ∧ (B mod q) divisât à la fois A
et B pour s’assurer que F est bien le pgcd de A et de B. Ce n’est pas tout–à–fait vrai. Le
principal problème vient de ce que F est défini au produit par un élément inversible de Z/qZ
près or les nombres inversibles dans Z/qZ ne sont pas forcément inversibles dans Z. Prenons
par exemple
A = (2X − 1)(2X + 1), B = (2X − 1)(6X − 1).
16
On cherche G = A ∧ B = 2X − 1. Calculons F = (A mod 23) ∧ (B mod 23). Si l’algorithme
utilisé retourne un pgcd unitaire, on obtient F = X + 11. Il s’agit bien de G mod 23 mais
à un facteur près :
(X + 11) = 1/2 (2X − 1) mod 23.
Le problème vient de ce qu’on a obtenu G à un facteur fractionnaire α = 1/2 près. Multiplions F par le pgcd c1 des coefficients initiaux a et b de A et de B. Comme le coefficient
initial g de G divise à la fois a et b et donc leur pgcd c1 le polynôme (c1 F ) mod q est égal
à β G pour un certain entier β. La partie primitive de (c1 F ) mod q est donc un diviseur
de G de même degré que G. Reprenons l’exemple précédent. On a c1 = 4 ∧ 12 = 4. Le
polynôme (c1 F ) mod 23 = 4X − 2. La partie primitive de ce polynôme est bien
2X − 1.
Maintenant, le pgcd G = A ∧ B peut ne pas être primitif. C’est le cas si A et B ont un entier
parmi leurs diviseurs communs. Ce problème se règle aisément en considérant que le pgcd
de deux polynômes primitifs est primitif et que
A ∧ B = (cont(A) ∧ cont(B)) × (pp(A) ∧ pp(B)).
fonction pgcd(A0 , B0 )
début
c0 := cont(A0 ) ∧ cont(B0 )
A := pp(A)
B := pp(B)
c1 := initial(A) ∧ initial(B)
faire
q := un nouveau nombre premier suffisamment grand
(en particulier qui ne divise pas c1 )
F := (A mod q) ∧ (B mod q) (unitaire, calculé dans (Z/qZ)[X])
F ′ := pp((c1 F ) mod q)
tant que F ′ ne divise pas A ou F ′ ne divise pas B dans Z[X]
retourner c0 F ′
fin
L’algorithme ci–dessus calcule A0 ∧ B0 . Il s’arrête parce qu’il n’existe qu’un nombre fini de
premiers malchanceux.
2.6.5
La borne de Landau–Mignotte
Avec l’algorithme ci–dessus, il faut que q > 2 × H(G) (on multiplie par deux à cause
des signes). Il faut même que q > 2 × c1 × H(G) à cause du polynôme temporaire qui
peut apparaı̂tre lors du calcul de F ′ . On peut s’appuyer sur l’inégalité suivante, prouvée par
Landau [8] puis par Mignotte [11]. La section qui suit est fortement inspirée de [12, pages
158–169],
17
Théorème 3 Soient P et Q deux polynômes non constants à coefficients entiers. Si Q divise
P alors
H(Q) < 2deg P H(P )
où la hauteur H(A) d’un polynôme A désigne le maximum (en valeur absolue) de ses coefficients.
Par conséquent, si A, B ∈ Z[X] sont deux polynômes avec deg A = n et deg B = m on
peut prendre
q > 2 × c1 × min(2n H(A), 2m H(B)).
Cette borne n’est pas optimale mais il est difficile de la réduire sensiblement dans la
pratique, c’est–à–dire sans faire de calculs coûteux7 . L’exemple suivant (qui se généralise)
montre que la hauteur du pgcd de deux polynômes A et B peut très bien être supérieure à
max(H(A), H(B)).
A = X 3 + X 2 − X − 1,
B = X 4 + X 3 + X + 1,
G = X 2 + 2X + 1.
Pour démontrer le théorème 3, il est commode de considérer des polynômes à coefficients
complexes plutôt qu’à coefficients entiers. Ceci nous conduit à généraliser la définition de
la hauteur d’un polynôme. Si P = ad X d + · · · + a1 X + a0 est un polynôme à coefficients
complexes, on définit la hauteur de P par
d
H(P ) = max |aj |.
j=0
Rappelons
√ que si z = a + ib est un nombre complexe, on note z̄ = a − ib son conjugué
et |z| = a2 + b2 son module. L’application z → z̄, qui à un nombre complexe associe son
nombre conjugué est un morphisme d’anneau8 : le conjugué d’une somme est égal à la somme
des conjugués ; le conjugué d’un produit au produit des conjugués. Conjugués et modules
sont liés par les relations suivantes : |z| = |z̄| et z z̄ = |z|2 .
Si P = ad X d + · · · + a1 X + a0 est un polynôme à coefficients complexes, on définit la
norme de P par
p
k P k= |ad |2 + · · · + |a0 |2
√
et on a l’inégalité k P k≤ d + 1 H(P ). Le lemme technique suivant est utilisé dans la
preuve de l’inégalité de Landau–Mignotte.
Lemme 1 Si P = ad X d + · · · + a1 X + a0 est un polynôme à coefficients complexes et z ∈ C
est un nombre complexe quelconque alors k (X − z)P k=k (z̄X − 1)P k.
7
Par contre, on sait que si un polynôme à coefficients entiers P se factorise alors il admet au moins un
facteur Q tel que H(Q) ≤ 2deg P/2 H(P ) [12, chapitre VII, page 305].
8
et même un morphisme de corps.
18
Preuve En posant ad+1 = a−1 = 0 par commodité, on a (X − z)P =
Par conséquent, k (X − z)P k2 est égal à
d+1
X
k=0
|ak−1 − z ak |2 =
d+1
X
k=0
d+1
X
(ak−1 − z ak )(āk−1 − z̄ āk ) = (1 + |z|2 ) k P k +
k=0
2
On vérifie que k (z̄X − 1)P k admet le même développement.
d+1
X
k=0
(ak−1 − z ak )X k .
ak−1 z̄ āk − āk−1 z ak .
L’inégalité de Landau–Mignotte constitue le résultat clef. Elle minore la norme d’un
polynôme P par une fonction multiplicative : la mesure de Mahler de P . Ainsi, il est possible
d’exprimer la norme (ou la hauteur) des facteurs de P en fonction de celle de P . Si P =
ad X d + · · · + a1 X + a0 = ad (X − z1 ) · · · (X − zd ) est un polynôme à coefficients complexes,
la mesure de Mahler de P est définie par
M(P ) = |ad |
d
Y
j=1
max(1, |zj |).
Si P = QR est une factorisation de P alors M(P ) = M(Q)M(R).
Théorème 4 (Inégalité de Landau–Mignotte)
Si P ∈ C[X] n’est pas réduit à un monôme alors M(P ) <k P k.
Preuve Soient z1 , . . . , zk les racines de P de module supérieur à 1. Considérons le polynôme
!
!
d
k
Y
Y
Q = ad
(z̄j X − 1)
(X − zj ) = bd X d + · · · + b1 X + b0 .
j=1
j=k+1
D’une part, on a |bd | = |ad z1 · · · zk | = M(P ) et donc M(P ) <k Q k ; d’autre part, k Q k=k
P k d’après le lemme 1.
Soit P = ad X d + · · · + a1 X + a0 = ad (X − z1 ) · · · (X − zd ) un polynôme à coefficients
complexes. Si zi1 , . . . , zik sont certaines racines de P (avec i1 < · · · < ik ) alors |ad zi1 · · · zik | ≤
M(P ). On en déduit les majorations9
d
d
M(P ) et donc H(P ) ≤
|ai | ≤
M(P )
⌊ d2 ⌋
i
10
Question 19. Montrer que si d = d1 + · · ·+ dk (où les di ∈ N) alors
m Y
di
d
≤
.
di
d
⌊
⌊
⌋
⌋
2
2
j=1
Si P = Q1 · · · Qm est une factorisation de P et di désigne le degré de Qi on a donc
!
m
m Y
Y
d
d
d √
di
M(P ) ≤
M(P ) <
k P k<
d + 1 H(P ).
H(Qj ) ≤
di
d
d
d
⌊
⌊
⌊
⌋
⌋
⌋
⌋
⌊
2
2
2
2
j=1
j=1
où np désigne le nombre de combinaisons de p éléments pris parmi n.
10
Indication : np est égal au nombre de façons possibles de placer p croix dans n cases.
9
19
11
Question 20. Montrer que
d
2 >
√
d+1
d
⌊ d2 ⌋
pour tout d ∈ N∗ .
Maintenant, si P, Q1 , . . . , Qm sont à coefficients entiers, H(Qi ) ≥ 1 pour tout i et donc
H(Qi ) < 2d H(P ).
2.6.6
Une deuxième méthode modulaire
La première méthode modulaire présente un gros inconvénient : le nombre premier q
peut n’être pas représentable sur un simple entier machine ; l’utilisation d’une bibliothèque
de grands entiers est très pénalisante.
La deuxième méthode modulaire consiste à faire plusieurs calculs de pgcd modulaire
F0 , F1 , . . . (modulo plusieurs petits nombres premiers q0 , q1 , . . .) et à ¡¡ combiner ¿¿ les Fi
entr’eux au fur et à mesure qu’ils ont calculés. À chaque étape, on teste si le pgcd est obtenu.
Par conséquent, si les coefficients de A ∧ B tiennent sur des entiers machine, cette méthode
permet de les calculer sans effectuer aucun calcul de grand entier.
2.6.7
Le théorème des restes chinois
Ce théorème fournit l’algorithme qui permet de ¡¡ combiner ¿¿ les Fi entr’eux. Le contenu
de cette section est présenté de façon claire (mais un peu abstraite) dans [4, chapitre 6].
Théorème 5 (théorème des restes chinois)
Si p, q sont deux entiers positifs premiers entr’eux et n = p q alors l’application
φ : Z/nZ →
a
7→ (a
Z/pZ × Z/qZ
mod p, a mod q)
est un isomorphisme de l’anneau Z/nZ sur l’anneau produit Z/pZ × Z/qZ.
Prenons p = 5, q = 7 et n = 35. On peut vérifier par exemple (on rappelle que les
opérations se font composante par composante dans les anneaux produits) que
Z/35Z φ Z/5Z × Z/7Z
17
→
(2, 3)
×
×
20
→
(0, −1)
k
k
25
→
(0, −3)
Z/35Z φ Z/5Z × Z/7Z
17
→
(2, 3)
+
+
20
→
(0, −1)
k
k
2
→
(2, 2)
11
Ca semble plus dur que je ne pensais.
20
L’algorithme d’Euclide étendu fournit une méthode rapide pour calculer φ−1 . Il s’agit,
connaissant un couple (a, b) ∈ Z/pZ × Z/qZ, de déterminer l’unique x ∈ Z/nZ tel que
x = a mod p,
x = b mod q.
(2)
(3)
On commence par calculer une identité de Bézout entre p et q, c’est–à–dire deux entiers u
et v tels que
p u + q v = 1.
En multipliant la ligne (2) par q v, la ligne (3) par p u et en additionnant membre à membre
on obtient
(p u + q v) x = x = a q v + b p u mod n.
Le raisonnement tenu ci–dessus, qui repose bien sur l’hypothèse p ∧ q = 1, montre que le
morphisme d’anneaux φ est surjectif. Montrons que φ est injectif : Si x′ est une autre solution
des équations (2) et (3) alors p | (x − x′ ) et q | (x − x′ ) donc n = ppcm(p, q) | (x − x′ ) et
x = x′ mod n.
Question 21. Déterminer le polynôme à ∈ (Z/15Z)[X] tel que
à = X 4 + X 2 − 1 (mod 3),
à = X 4 + 2X − 2 (mod 5).
Question 22. Prendre au choix deux entiers p, q tels que p ∧ q 6= 1. Exhiber un couple
(a, b) ∈ Z/pZ × Z/qZ n’admettant pas d’antécédent dans Z/nZ.
2.6.8
L’algorithme
fonction pgcd(A0 , B0 )
début
c0 := cont(A0 ) ∧ cont(B0 )
A := pp(A0 )
B := pp(B0 )
c1 := initial(A) ∧ initial(B)
q := un nombre premier qui ne divise pas c1
F := (A mod q) ∧ (B mod q) (unitaire, calculé dans (Z/qZ)[X])
si F = 1 alors
retourner c0
fin si
q̃ := q
F̃ := F
F := pp((c1 F ) mod q)
tant que F ne divise pas A ou F ne divise pas B dans Z[X] faire
21
q := un nouveau nombre premier qui ne divise pas c1
F := (A mod q) ∧ (B mod q) (unitaire, calculé dans (Z/qZ)[X])
si F = 1 alors
retourner c0
sinon si deg F < deg F̃ alors
q̃ := q
F̃ := F
F := pp((c1 F ) mod q)
sinon si deg F = deg F̃ alors
q ′ := q × q̃
calculer (avec le théorème chinois) F ′ ∈ (Z/q ′ Z)[X] tel que
F ′ = F (mod q)
F ′ = F̃ (mod q̃)
q̃ := q ′
F̃ := F ′ (noter que F ′ est unitaire)
F := pp((c1 F̃ ) mod q̃)
fin si
fait
retourner c0 F
fin
Prenons par exemple A0 = (X 2 + 3)(2X − 3) et B0 = (2X 2 + 3)(2X − 3). On cherche
G = 2X − 3. Les polynômes A0 et B0 sont primitifs (c0 = 1 et c1 = 2) donc A = A0 et
B = B0 . On ne peut pas prendre q0 = 2 qui divise les coefficients initiaux de A et de B.
Prenons q0 = 3. On trouve F0 = X 3 et F = pp((c1 F0 ) mod 3) = −X 3 . Le polynôme F
ne divise ni A ni B mais on ne peut encore rien conclure.
Prenons q1 = 5. On trouve F1 = X + 1. Comme deg F1 < deg F0 on sait que deg F0
est incorrect. On ne tient donc pas compte de la précédente valeur de F̃ et on obtient
F = pp((c1 F1 ) mod 5) = X + 1. Ce polynôme ne divise ni A ni B mais on ne peut rien
conclure de plus.
Pour q2 = 7 on trouve F2 = X+2. Comme deg F2 = deg F̃ on combine ces deux polynômes
avec le théorème des chinois. On trouve F ′ = X + 16 et F = pp((c1 F ′ ) mod 35) = 2X − 3.
Ce dernier polynôme divise A et B.
Le pgcd recherché est donc G = c0 F̃ = 2X − 3.
L’algorithme ci–dessus peut être facilement optimisé de façon à éviter quelques calculs
inutiles. Il peut être intéressant de partir d’un nombre premier initial pas trop petit (mettons
un peu supérieur à deux fois le minimum des hauteurs de A et de B).
22
2.7
Factorisation sans carrés d’un polynôme
Soit A ∈ Z[X] un polynôme en une indéterminée et à coefficients entiers. Un polynôme
irréductible P est un diviseur de A de multiplicité n si P n | A et P n+1 6 | A, ce qu’on note
P n k A.
Un polynôme A dont tous les facteurs irréductibles sont simples (de multiplicité 1) est dit
sans carrés.
Théorème 6 Soient A ∈ Z[X] un polynôme en une indéterminée et à coefficients entiers,
A′ sa dérivée et P ∈ Z[X] un polynôme irréductible. Alors
P n k A ⇔ P n−1 k A ∧ A′ .
Preuve L’implication de gauche à droite. Supposons P n k A. Il existe alors un polynôme
B tel que A = P n B et P 6 | B. En dérivant on trouve A′ = n P n−1 P ′ B + P n B ′ . D’une part
P n−1 | A, d’autre part P n 6 | A′ puisque P 6 | P ′ B (en effet, P 6 | P ′ et P 6 | B et P est
irréductible12 ).
L’implication de droite à gauche se démontre par des arguments similaires.
Soit A = F1a1 · · · Fkak ·Fk+1 · · · Fn . Les polynômes F1 , . . . , Fk sont les facteurs irréductibles
multiples de A (les ai ≥ 2). Les polynômes Fk+1 , . . . , Fn sont les facteurs irréductibles
simples de A. D’après le théorème 6, le polynôme G = A ∧ A′ est égal à F1a1 −1 · · · Fkak −1 . Par
conséquent
A
= F1 · · · Fk · Fk+1 · · · Fn
G
est un facteur sans carrés de A.
Tout polynôme A peut donc être décomposé en un produit A = P1a1 · · · Pnan tel que
chaque Pi est sans facteurs carrés. Voici un algorithme :
fonction factorisation sans carrés(A)
début
G := A ∧ A′ (où A′ désigne la dérivée de A)
si G = 1 alors
retourner A
sinon
retourner (A/G) × factorisation sans carrés(G)
fin si
fin
12
Précisément, on utilise le lemme de Gauss, qui dit que si P est irréductible, P | A B et P ∧ A = 1 alors
P | B.
23
2.7.1
Variantes de la factorisation sans carrés
Tout polynôme A peut s’écrire
A = P1 P22 P33 · · · Pkk
où chaque Pi est sans facteurs carrés et où Pi ∧ Pj = 1 quand i 6= j. Ces facteurs Pi et leur
multiplicité peuvent se calculer en s’inspirant de ce qui suit.
G := A ∧ A′
H := A/G
G∧H
H/(G ∧ H)
=
=
=
=
P2 P32 · · · Pkk−1
P1 P2 P3 · · · Pk
P2 P3 · · · Pk
P1 .
C’est ce type de variante qui est employé dans les méthodes classiques d’intégration de
fractions rationnelles (la propriété Pi ∧ Pj = 1 y est essentielle).
2.8
L’algorithme de Berlekamp
L’algorithme de Berlekamp [1] calcule la factorisation complète d’un polynôme sans facteurs carrés A ∈ (Z/qZ)[X] où q est premier. Cette section est organisée comme suit : les
grandes lignes de l’algorithme de Berlekamp sont exposées sans justification en section 2.8.1 ;
les preuves sont données dans les sections 2.8.2 à 2.8.3.
Si A est un polynôme sans facteurs carrés de Z[X] et q est un nombre premier alors le
polynôme (A mod q) peut contenir des facteurs carrés. Par exemple, le polynôme
A = (X − 1)(X + 4)
est sans facteurs carrés dans Z[X] mais pas dans (Z/5Z)[X] car 4 = −1 mod 5. Toutefois
1. si A est sans facteurs carrés dans Z[X] alors il existe des nombres premiers q tels que
(A mod q) soit sans facteurs carrés ;
2. le polynôme (A mod q) est sans facteurs carrés dans (Z/qZ)[X] si et seulement si
(A
mod q) ∧ (A′
mod q) = 1
où A′ désigne la dérivée de A et où le calcul de pgcd se fait dans (Z/qZ)[X].
Soit q un nombre premier et A un polynôme de (Z/qZ)[X] qui soit sans facteurs carrés.
Nous pouvons supposer A unitaire.
A = X n + an−1 X n−1 + · · · + a0 .
Nous cherchons la factorisation irréductible de A dans (Z/qZ)[X].
24
2.8.1
Résumé de la méthode
– L’ensemble13 U = {P ∈ (Z/qZ)[X] | deg P < deg A} est un espace vectoriel14 sur Z/qZ
de dimension n = deg A. Supposons par exemple que n = deg A = 3. Le polynôme
P = 2X − 1 peut être représenté par le vecteur


−1
 2 .
0
– L’application
γ : U → U
P 7→ P q
mod (q, A)
est linéaire sur Z/qZ : elle peut être présentée par une matrice M de taille n × n et
à coefficients dans Z/qZ. Prenons q = 5 et A = (X 2 + 2X − 1)(X − 2)(X + 1) par
exemple. On a


1
2
1 0
 0
0
2 0 

M =
 0 −2
0 0 
0
1 −2 1
Par exemple, on vérifie que (X 3 + 2X − 1)5 mod (5, A) = −2X 3 + X 2 − 2 et que




−2
−1
 0 
 2 



M ·
 0  =  1 ·
−2
1
– L’ensemble W = {P ∈ U | P q = P mod (q, A)} est un sous–espace vectoriel de U. En
fait, W est le noyau de l’application linéaire associée à la matrice M −I, où I désigne la
matrice identité de taille n×n. Une base B du noyau de W peut se calculer rapidement
par un algorithme proche du pivot de Gauss à partir de M − I (cf. section 2.8.4). En
reprenant l’exemple précédent, on trouve
B = {B1 , B2 , B3 } = {1, X 2 + 2X, X 3 }.
On peut remarquer que toute base de W contient une constante, ce qui est normal
d’après la proposition 6 et la définition de W.
– Le nombre de facteurs irréductibles de A dans (Z/qZ)[X] est égal à dim W = |B|. Ces
facteurs peuvent alors se calculer par l’algorithme suivant.
13
L’ensemble U peut être vu comme l’anneau (Z/qZ)[X]/(A) des classes d’équivalence de (Z/qZ)[X] modulo l’idéal (A) ou l’anneau Z[X]/(q, A) des classes d’équivalence de Z[X] modulo l’idéal (q, A).
14
C’est évident puisque la somme de deux polynômes de degré inférieur à n est un polynôme de degré
inférieur à n ; le produit d’un polynôme de degré inférieur à n par un élément de Z/qZ est à nouveau un
polynôme de degré inférieur à n.
25
fonction Berlekamp(A, B)
début
r := |B|
à factoriser := {A}
résultat := ∅
tant que |à factoriser| + |résultat| < r faire
F := un élément de à factoriser
à factoriser := à factoriser \ {F }
chercher P ∈ B et a ∈ Z/qZ tel que 0 < deg G < deg F (où G = F ∧ P − a)
si un tel G existe alors
à factoriser := à factoriser ∪ {G, F/G}
sinon
résultat := résultat ∪ {F }
fin si
fait
retourner à factoriser ∪ résultat
fin
Reprenons l’exemple précédent. Le polynôme à factoriser est
A = (X 2 + 2X − 1)(X − 2)(X + 1) dans (Z/5Z)[X].
Comme |B| = 3 on sait que A comporte trois facteurs irréductibles. Un calcul de pgcd
entre A et B2 − 1 sépare le premier facteur irréductible de A des deux autres. Un calcul
de pgcd entre (X − 2)(X + 1) et B3 + 2 sépare X − 2 (le pgcd) du dernier facteur
irréductible.
2.8.2
L’application γ est linéaire
Dans cette section on montre que l’application γ est linéaire sur Z/qZ en montrant qu’elle
peut être présentée par une matrice M.
γ : U → U
P 7→ P q
mod (q, A)
Proposition 5 Si q est premier et P, Q ∈ (Z/qZ)[X] alors (P + Q)q = P q + Qq .
q
Preuve On a (P + Q)q = P q + q1 P q−1Q + · · · + q−1
P Qq−1 + Qq d’après la formule du
binôme. Comme q est premier tous les coefficients du binôme (sauf le premier et le dernier)
sont divisibles par q.
Proposition 6 (petit théorème de Fermat). Si a ∈ Z/qZ alors aq = a.
Preuve Par récurrence sur a. Base : la formule est vraie pour a = 0 et a = 1.
26
Cas général : on suppose que a > 1 et que (a − 1)q = a − 1 (hypothèse de récurrence). Or
aq = ((a − 1) + 1)q = (a − 1)q + 1q d’après la proposition 5. D’après l’hypothèse de récurrence
(a − 1)q + 1q = (a − 1) + 1 = a.
Les propositions 5 et 6 fournissent un algorithme rapide d’élévation d’un polynôme P à
la puissance q. Soit P = cd X d +· · ·+c1 X +c0 . On a P q = (cd X d )q +· · ·+(c1 X)q +cq0 d’après
la proposition 5. En appliquant la proposition 6 on trouve P q = cd X d q + · · · + c1 X q + c0 .
Par exemple (2X 5 + 3X 2 − 2)7 = (2X 35 + 3X 14 − 2) mod 7.
Soit n = deg A. Considérons un polynôme P = cn−1 X n−1 + · · · + c1 X + c0 appartenant
à U. D’après ce qui précède et les règles de calcul sur les modulos on a
Pq
mod (q, A) = cn−1 (X (n−1)q
Notons

On obtient

c0


P =  ... 
cn−1



Pq = 

1
0
..
.
mod (q, A)) + · · · + c1 (X q
et X i q


a0,i


mod (q, A) =  ...  .
an−1,i
···
a0,1
a1,1
..
.
mod (q, A)) + c0 ,
a0,n−1
a1,n−1
..
.
0 an−1,1 · · · an−1,n−1
 
 
 
·
 
c0
c1
..
.
cn−1



.

La matrice (ai,j ) est la matrice M de l’application γ, ce qui prouve que γ est une application
linéaire. Prenons par exemple q = 5 et A = (X 3 + 2)(X + 1). On trouve
X0
X5
X 10
X 15
et donc
2.8.3
mod
mod
mod
mod
(q,
(q,
(q,
(q,
A)
A)
A)
A)
=
=
=
=

1,
X 3 − 2X 2 + 2,
−2X 3 + 2X + 1,
X3
1
2
1
 0
0
2
M =
 0 −2
0
0
1 −2

0
0 

0 
1
Structure de W
Le théorème clef est le théorème 7.
L’ensemble W = {P ∈ U | P q = P mod (q, A)} est le noyau de l’application linéaire
associée à la matrice M − I. Par conséquent, W est un sous–espace vectoriel de U.
27
Proposition 7 Si P ∈ (Z/qZ)[X] est un polynôme alors le polynôme P q − P se factorise
en P q − P = P (P − 1) · · · (P − q + 1).
Preuve D’après la proposition 6, tout élément de Z/qZ est solution de l’équation X q − X =
0. Par conséquent, X q − X = X (X − 1) · · · (X − q + 1). Il suffit de remplacer X par P dans
la formule.
Proposition 8 Si P ∈ W et si Ak est un facteur irréductible de A alors
P
mod (q, Ak ) ∈ Z/qZ.
Preuve W est par définition l’ensemble des polynômes P ∈ U tels que A divise P q − P . Si
Ak est un facteur irréductible de A alors il existe a ∈ Z/qZ tel que Ak divise P − a d’après
la proposition 7 ; et donc P mod (q, Ak ) = a ∈ Z/qZ.
Vérifions par exemple que le reste de la division euclidienne des polynômes de B par
les facteurs irréductibles de A est bien une constante. C’est évident pour les deux facteurs
irréductibles de degré de 1. Faisons le calcul avec Ak = X 2 + 2X − 1 :
1
X + 2X
X3
2
mod (5, Ak ) = 1,
mod (5, Ak ) = 1,
mod (5, Ak ) = −2.
La proposition qui suit se démontre immédiatement avec le théorème des restes chinois15
Notez l’analogie entre sa preuve et la preuve du théorème chinois étudié la semaine passée.
Proposition 9 Soit A = A1 · · · Ar la factorisation irréductible de A dans (Z/qZ)[X]. Quel
que soit (s1 , . . . , sr ) ∈ (Z/qZ)r il existe un unique P ∈ U tel que
P = s1
..
.
P = sr
mod (q, A1 ),
mod (q, Ar ).
Preuve Je fais la preuve dans le cas r = 2. Pour montrer l’existence d’une solution, il s’agit,
connaissant s1 , s2 , A1 , A2 , de résoudre
P = s1 + B1 A1 ,
P = s2 + B2 A2 .
15
Rapidement . . . Le théorème chinois implique que, comme A est sans facteurs carrés dans (Z/qZ)[X],
l’anneau quotient U = Z[X]/(q, A) est isomorphe à l’anneau produit Z[X]/(q, A1 ) × · · · × Z[X]/(q, Ar ) où
A1 , . . . , Ar désignent les facteurs irréductibles de A dans (Z/qZ)[X]. Chaque composante du produit est une
extension algébrique de corps de Z/qZ. Ce qui n’est pas immédiat, c’est que l’isomorphisme envoie W sur
(Z/qZ)r (théorème 7).
28
Comme A est sans facteurs carrés, A1 ∧ A2 = 1 et il existe deux polynômes U1 et U2 tels que
U1 A1 + U2 A2 = 1. En multipliant la première ligne par U2 A2 , la seconde par U1 A1 et en
additionnant membre à membre on trouve bien un polynôme P de degré inférieur à deg A :
P = s1 U2 A2 + s2 U1 A1
mod (q, A).
Montrons l’unicité. Soit P ′ ∈ U une autre solution du système ci–dessus. On a (P −P ′ ) = 0
mod A1 et (P − P ′ ) = 0 mod A2 . Le polynôme P − P ′ est divisible par le ppmc de A1 et
de A2 . Comme ces polynômes sont premiers entr’eux, P − P ′ est divisible par leur produit A.
Maintenant deg P, deg P ′ < deg A donc P − P ′ = 0.
Théorème 7 Si A = A1 · · · Ar est la décomposition en facteurs irréductibles de A dans
(Z/qZ)[X] alors l’application
φ : W −→ (Z/qZ)r
P 7−→ (P mod (q, A1 ), . . . , P
mod (q, Ar ))
définit un isomorphisme d’espaces vectoriels.
Preuve La proposition 8 montre que φ est à image dans (Z/qZ)r . À titre d’exercice,
le lecteur peut vérifier que φ est bien un homomorphisme d’espaces vectoriels sur Z/qZ.
Montrons que φ est bijective.
La proposition 9 montre que tout r–uplet (s1 , . . . , sr ) ∈ (Z/qZ)r admet un unique
antécédent P dans U. Reste à montrer que P ∈ W, c’est–à–dire que P q = P mod (q, A).
Soit 1 ≤ k ≤ r un indice. Comme Ak divise A on a
(P q
Or P q mod (q, Ak ) =
mod (q, A))
sqk
mod (q, Ak ) = P q
mod (q, Ak ).
= sk d’après la proposition 6. Par conséquent
φ(P q
mod (q, A)) = (s1 , . . . , sr ).
Comme P est l’unique antécédent de (s1 , . . . , sr ) par φ on a bien P q = P mod (q, A)
c’est–à–dire P ∈ W.
Corollaire 2 Le nombre de facteurs irréductibles de A est égal à dim W.
Preuve Deux espaces vectoriels (de dimension finie) ont même dimension si et seulement
si ils sont isomorphes. L’espace vectoriel (Z/qZ)r est de dimension r sur Z/qZ.
Corollaire 3 Si F est un facteur non irréductible de A et B est une base de W alors il
existe B ∈ B et a ∈ Z/qZ tels que F ∧ (B − a) = G où G est un facteur non trivial de F
(c’est–à–dire 0 < deg G < deg F ).
Preuve D’après la proposition 8, quel que soit B ∈ B, il existe a ∈ Z/qZ tel que Ai
divise B − a.
Comme A est sans facteurs carrés, il suffit de prouver que si Ai et Aj sont deux facteurs
irréductibles de A alors il existe B ∈ B et a ∈ Z/qZ tels que Ai divise B − a et Aj ne divise
pas B − a. Si c’était faux, on aurait B mod (q, Ai ) = B mod (q, Aj ) pour tout B ∈ B et
donc P mod (q, Ai ) = P mod (q, Aj ) pour tout P ∈ W, ce qui contredirait le théorème 7
(bijectivité de φ).
29
2.8.4
Calcul d’une base du noyau de W
Le texte qui suit est une adaptation d’un texte extrait de [7, vol. 2, page 425].
Soit A une matrice n × n dont les éléments ai,j appartiennent à un corps K et dont les
indices sont dans l’intervalle 0 ≤ i, j < n. Le premier indice est l’indice de ligne. Le deuxième
l’indice de colonne. L’algorithme qui suit calcule une base du noyau de l’application linéaire
associée à A, c’est–à–dire r vecteurs v1 , . . . , vr linéairement indépendants sur K tel que A·vi
est égal au vecteur nul, où le rang de A est n − r.
1. Initialiser c0 = · · · = cn−1 = −1 et r = 0. Au cours de l’algorithme, nous aurons cj ≥ 0
seulement si aj,cj = −1 et toutes les autres cases de la colonne cj sont nulles.
2. Répéter le point 3 pour k = 0, . . . , n − 1.
3. Parcours de colonne pour tester la dépendance linéaire.
S’il existe un indice 0 ≤ j < n tel que aj,k 6= 0 et cj < 0 alors multiplier la ligne j
de A par −1/aj,k (de telle sorte que aj,k vaille −1) puis ajouter ai,k fois la ligne j à la
ligne i pour i 6= j et poser finalement cj = k. L’opération ci–dessus n’a aucun effet sur
les colonnes 0, 1, . . . , k − 1 ; elle est inutile aussi si ai,k = 0.
Si par contre aj,k = 0 ou cj ≥ 0 pour tout indice 0 ≤ j < n alors incrémenter r et
stocker le vecteur vr = (v 0 , . . . , v n−1) défini par :
v j = as,k si cs = j ≥ 0,
vj = 1
si j = k,
vj = 0
sinon.
2.9
La remontée de Hensel
Soit A ∈ Z[X] un polynôme primitif et sans facteurs carrés. On suppose connue une
factorisation de A dans (Z/qZ)[X] (q est un nombre premier). On cherche les facteurs
irréductibles A1 , . . . , Ar de A dans Z[X]. Une solution est donnée par le lemme de Hensel
[6, chapter 4] ou [10, page 207]. La présentation originale en est assez abstraite. L’idée d’appliquer le lemme de Hensel à la factorisation de polynômes semble être due à Zassenhaus
dans [17].
2.9.1
Factorisation modulaire et factorisation dans Z[X]
Soit A = (X 3 + 7)(X 2 + 2) un polynôme sans facteurs carrés et à coefficients entiers.
Considérons ses factorisations irréductibles modulo 5 et modulo 11 :
A = (X 2 + 2X − 1)(X − 2)(X 2 + 2) (mod 5)
A = (X 2 + 5X + 3)(X + 3)(X − 5)(X − 3) (mod 11)
On constate que la factorisation modulaire est plus fine que la factorisation dans Z[X] : il
existe une partition E1 ∪ · · · ∪ Er de l’ensemble des facteurs modulaires irréductibles telle
que
Y
Ai =
p (mod q)
1 ≤ i ≤ r.
p∈Ei
30
Par exemple :
X 3 + 7 = (X 2 + 2X − 1)(X − 2) (mod 5)
X 3 + 7 = (X 2 + 5X + 3)(X − 5) (mod 11)
X 2 + 2 = (X + 3)(X − 3) (mod 11).
Cette constatation se justifie : l’application ¡¡ modulo q ¿¿, qui est un morphisme d’anneaux,
commute avec les produits : A1 · · · Ar mod q = (A1 mod q) · · · (Ar mod q). D’une part, en
remplaçant chaque Ai mod q par le produit de ses facteurs irréductibles dans (Z/qZ)[X], on
obtient une factorisation irréductible de A dans (Z/qZ)[X] ; d’autre part, comme q est premier, Z/qZ est un corps et tout élément de (Z/qZ)[X] admet une factorisation irréductible,
qui est unique. Quelques remarques complémentaires méritent d’être faites :
1. Le nombre de facteurs irréductibles de A dans (Z/qZ)[X] varie en fonction de q.
2. Il existe des polynômes pour lesquels tous les nombres premiers sont ¡¡ malchanceux
¿¿ : c’est le cas de X 4 + 1, qui est irréductible dans Z[X] mais qui se factorise dans
(Z/qZ)[X] pour tous les nombres premiers q.
Nous sommes donc, comme dans le cas du pgcd de polynômes, confrontés à deux problèmes :
1. calculer une factorisation de A dans (Z/nZ)[X] qui soit au moins aussi fine que celle
dans Z[X] et telle que n > 2 H(F ) où F est n’importe quel facteur de A (le problème
de la remontée) ;
2. déterminer la partition de l’ensemble des facteurs modulaires de A qui fournit la factorisation dans Z[X].
2.9.2
Le problème de la remontée
Les techniques considérées pour l’algorithme du pgcd ne s’appliquent pas pour l’algorithme de factorisation.
Il est hors de question d’exécuter l’algorithme de Berlekamp pour une grande valeur de q
(penser à la boucle qui parcourt tous les éléments de Z/qZ !). C’est d’ailleurs souvent une
variante de l’algorithme de Berlekamp qui est utilisée dès que q > 23 [7, vol. 2, page 428].
Il n’est pas non plus souhaitable d’utiliser le mécanisme fourni par le théorème des restes
chinois. Il y a le coût de l’algorithme de Berlekamp, à exécuter pour des nombres premiers
de plus en plus grands. Surtout, étant données deux factorisations modulaires, on ignore
quels facteurs il faut combiner entre eux. Reprenons l’exemple introductif. Si on combine
(X 2 + 2X − 1)(X − 2) mod 5 avec X 2 + 2 mod 11 d’une part et (X 2 + 5X + 3)(X − 5)
mod 5 avec (X + 3)(X − 3) mod 11 d’autre part, on trouve une factorisation de A dans
(Z/55Z)[X] qui nous fournit la factorisation dans Z[X] :
Facteurs mod 5
Facteurs mod 11
(X 2 + 2X − 1)(X − 2) (X 2 + 5X + 3)(X − 5)
X2 + 2
(X + 3)(X − 3)
31
Facteurs mod 55
X3 + 7
X2 + 2
Si par contre on combine (X 2 + 2X − 1)(X − 2) mod 5 avec (X 2 + 5X + 3)(X − 3) mod 11
et X 2 + 2 mod 5 avec (X − 5)(X + 3) mod 11 on trouve une factorisation dans (Z/55Z)[X]
à partir de laquelle on ne retrouvera jamais la factorisation dans Z[X] :
Facteurs mod 11
Facteurs mod 5
Facteurs mod 55
(X 2 + 2X − 1)(X − 2) (X 2 + 5X + 3)(X − 3) X 3 − 20X 2 + 10X + 2
X2 + 2
(X − 5)(X + 3)
X 2 + 20X + 7
2.9.3
Le lemme de Hensel
Théorème 8 (lemme de Hensel)
Soient A ∈ Z[X] un polynôme à coefficients entiers et q un nombre premier. Soient
F1 , G1 , U, V ∈ (Z/qZ)[X] tels que
(i) A = F1 G1 mod q,
(ii) G1 est unitaire,
(iii) F1 U + G1 V = 1 mod q.
Alors, quel que soit k ≥ 1, il existe un unique couple (Fk , Gk ) de polynômes appartenant à
(Z/q k Z)[X] tels que
(1) A = Fk Gk mod q k ,
(2) Gk est unitaire,
(3) Fk = F1 mod q et Gk = G1 mod q.
Preuve de l’existence. Par récurrence sur k. La base de la récurrence (k = 1) est claire.
Supposons les relations (1) à (3) vérifiées à l’ordre k. Montrons comment les obtenir à l’ordre
k + 1. L’hypothèse (1) implique q k | A − Fk Gk . Calculons l’erreur à l’étape k :
Ek =
A − Fk Gk
·
qk
Calculons le quotient Q et le reste R de la division euclidienne de Ek U par Gk dans
(Z/q k Z)[X]. La division s’effectue sans difficultés car Gk est unitaire. On a
Ek U = Gk Q + R
deg R < deg Gk .
(mod q k )
Prenons
Fk+1 = Fk + q k (Ek V + Q Fk ) (mod q k+1)
Gk+1 = Gk + q k (Ek U − Q Gk ) (mod q k+1 ).
En développant on trouve
Fk+1 Gk+1 = Fk Gk + q k Ek (Fk U + Gk V ) (mod q k+1 ).
32
D’après l’hypothèse (2) il existe un polynôme H tel que Fk U + Gk V = 1 + q H. La formule
ci–dessus se réécrit donc
A − Fk Gk
(1 + q H) = A (mod q k+1).
Fk+1 Gk+1 = Fk Gk + q k
k
q
La relation (1) est donc vérifiée à l’ordre k+1. Comme Ek U −Q Gk = R est de degré inférieur
à celui de Gk , on voit que deg Gk+1 = deg Gk et que Gk+1 est unitaire. La relation (2) est
donc vérifiée à l’ordre k + 1. Comme deg Gk+1 = deg Gk on a aussi deg Fk+1 = deg Fk . La
relation (3) est donc vérifiée à l’ordre k + 1.
Preuve de l’unicité. Par récurrence sur k. La base de la récurrence (k = 1) est claire.
Supposons que Fk et Gk soient les uniques polynômes vérifiant (1) à (3) à l’ordre k. Montrons
que Fk+1 et Gk+1 sont uniques eux–aussi.
On a A = Fk+1 Gk+1 mod q k+1 . Par conséquent A = Fk+1 Gk+1 mod q k . D’après l’hypothèse de récurrence, Fk+1 = Fk mod q k et Gk+1 = Gk mod q k . Il existe donc deux
polynômes F et G tels que
Fk+1 = Fk + q k F ,
Gk+1 = Gk + q k G.
Il suffit de montrer que F et G sont uniques modulo q. Comme Gk+1 et Gk sont deux
polynômes unitaires de même degré, deg G < deg Gk d’où deg F < deg Fk . Développons le
produit
Fk+1 Gk+1 = Fk Gk + q k (G F1 + F G1 ) mod q k+1 .
′
′
Supposons maintenant que F et G soient deux autres polynômes qui satisfassent aussi la
relation ci–dessus. En substituant et en soustrayant membre à membre on trouve
′
′
(G − G ) F1 = (F − F ) G1
′
mod q.
′
′
On16 a G1 | (G − G ) F1 U mod q et G1 | (G − G ) G1 V mod q donc G1 | (G − G ) mod q.
′
′
′
Comme deg(G − G ) < deg G1 , on déduit que G = G mod q et donc que F = F mod q.
Remarque. Remarquer que les polynômes U et V peuvent se calculer une fois pour toutes
par l’algorithme d’Euclide étendu à partir de F1 et de G1 .
Exemple. Reprenons notre exemple introductif A = (X 3 + 7)(X 2 + 2). On cherche à
remonter dans (Z/25Z)[X] la factorisation
A = (X 3 + 2)(X 2 + 2) (mod 5).
Posons F1 = X 3 + 2 et G1 = X 2 + 2. Comme A est sans facteurs carrés dans (Z/5Z)[X]
les polynômes F1 et G1 sont premiers entr’eux et l’algorithme d’Euclide étendu (version
polynomiale) nous donne deux polynômes U = X + 1 et V = −X 2 − X + 2 tels que
U F1 + V G1 = 1.
16
Ou plus rapidement : d’après le lemme de Gauss . . .
33
On trouve E1 = (A − F1 G1 )/5 = X 2 + 2 et Q = X + 1 et R = 0 ce qui nous donne
F2 = F1 + 5 (E1 V + Q F1 ) = X 3 + 7 (mod 25)
G2 = G1 + 5 R = X 2 + 2 (mod 25).
Le lemme de Hensel a permis de calculer les facteurs de A dans Z[X].
Exemple. Prenons maintenant A = X 3 + 7 et cherchons à remonter dans (Z/125Z)[X] la
factorisation
A = (X 2 + 2X − 1)(X − 2) (mod 5).
Posons F1 = X 2 + 2X − 1 et G1 = X − 2. Ces deux polynômes sont premiers entr’eux et
l’algorithme d’Euclide étendu nous donne deux polynômes U = −2 et V = 2X − 2 tels que
U F1 + V G1 = 1.
On trouve E1 = 1 et Q = 0 et R = U = −2 ce qui nous donne
F2 = X 2 + 7X − 1 (mod 25)
G2 = X − 7 (mod 25)
On peut vérifier que A = F2 G2 (mod 25). Continuons la remontée : on trouve E2 = 2X et
Q = −4 et R = −3 ce qui nous donne
F3 = X 2 − 43X − 26 (mod 125)
G3 = X + 43 (mod 125)
On peut vérifier que A = F3 G3 (mod 125). La remontée a réussi ici aussi mais ne fournit
pas les facteurs de A dans Z[X].
2.9.4
Déterminer la bonne partition
On rappelle que A est supposé primitif et sans facteurs carrés.
Supposons connue la factorisation irréductible de A dans (Z/qZ)[X]. Si elle ne comporte
qu’un facteur, A est irréductible dans (Z/qZ)[X] et A est irréductible dans Z[X]. Supposons
donc que A admette au moins deux facteurs dans (Z/qZ)[X].
Grâce à la borne de Landau–Mignotte, on peut déterminer k tel que q k > 2 H(F ) où F
est n’importe quel facteur de A dans Z[X].
On peut déterminer la partition des facteurs irréductibles de A dans (Z/qZ)[X] qui
fournit la factorisation irréductible de A dans Z[X] récursivement : on partitionne de façon
quelconque l’ensemble des facteurs irréductibles de A dans (Z/qZ)[X] en deux ensembles
F et G. Notons F1 le produit des éléments de F et G1 le produit des éléments de G. Ces
34
polynômes sont premiers entr’eux puisque A est sans facteurs carrés. Le lemme de Hensel
nous permet d’en déduire une factorisation
A = Fk Gk
(mod q k ).
– Si Gk et Fk divisent A dans Z[X], c’est que la partition en les deux ensembles F et G
fournit le début de la partition recherchée. On peut alors exécuter l’algorithme sur Fk
et F d’un côté et sur Gk et G de l’autre.
– Si l’un des polynômes Fk , Gk ne divise pas A dans Z[X], c’est que la partition en F et
G n’est pas bonne. On en essaie une autre.
– Si aucune partition en deux ensembles F et G ne convient, c’est que A est irréductible
dans Z[X].
2.9.5
Lever l’indétermination du coefficient initial
On retrouve un problème rencontré dans l’algorithme du pgcd : les facteurs Fk et Gk de A
dans (Z/q k Z)[X] ne sont uniques qu’au produit par un élément inversible de Z/q k Z près or
les éléments inversibles dans Z/q k Z ne le sont pas forcément dans Z. Les tests de divisibilité
dans Z[X] doivent être effectués avec soin.
Soit c le coefficient initial de A. Pour tester si Gk divise A dans Z[X], on peut soit tester
si la partie primitive du polynôme (c Gk ) mod q k divise A dans Z[X] (technique employée
dans l’algorithme du pgcd), soit tester si le polynôme (c Gk ) mod q k divise c A dans Z[X].
Il faut remarquer que le polynôme (c Gk ) mod q k devra de toutes façons être remplacé par
sa partie primitive dans le cas où le test de divisibilité est positif. La deuxième méthode est
moins coûteuse dans notre cas parce que de nombreux tests de divisibilité seront négatifs.
Le polynôme Fk doit être traité légèrement différemment puisqu’il n’est pas nécessairement
unitaire.
Considérons par exemple le polynôme A = (2X − 1)(6X + 1) = 12X 2 − 4X − 1. Le coefficient initial de A est c = 12. Appliquons l’algorithme de Berlekamp sur A dans (Z/5Z)[X].
Pour simplifier, on peut même rendre le polynôme A unitaire dans (Z/5Z)[X] avant de le
factoriser. On obtient
A
= (X + 2)(X + 1) (mod 5).
c
Appliquons le lemme de Hensel sur F1 = c (X + 2) mod 5 et G1 = (X + 1) mod 5. On
obtient (pour k = 3)
Fk = 12X − 6 mod 125,
Gk = X + 21 mod 125.
On vérifie que A = Fk Gk mod 125. Le polynôme (c Gk ) = 12X + 2 mod 125 divise c A. Le
polynôme Fk (qui a déjà été multiplié par c) divise c A lui aussi.
Ces considérations nous conduisent à l’algorithme suivant, qui retourne le produit des
facteurs irréductibles dans Z[X] d’un polynôme A0 quelconque. La fonction ne factorise pas
le contenu de A0 !
35
fonction factoriser(A0 )
début
c0 := cont(A0 )
A := pp(A0 )
B1 · · · Bs := une factorisation de A telle que chaque Bi soit sans carrés dans Z[X]
résultat := 1
pour i = 1 à s faire
c := initial(Bi )
q := un petit premier tel que c 6= 0 (mod q) et Bi soit sans carrés dans (Z/qZ)[X]
C1 · · · Ct := la factorisation irréductible de Bi /c mod q dans (Z/qZ)[X]
k := le plus petit entier tel que q k > 2 c H(F ) pour tout facteur F de A dans Z[X]
résultat := résultat × remonter(C1 · · · Ct , Bi , q, k)
fait
retourner c0 × résultat
fin
Dans la fonction suivante, on a A = initial(A) · C1 · · · Ct (mod q). Le polynome A ∈ Z[X] est
primitif et sans facteurs carrés. Les polynômes Ci ∈ (Z/qZ)[X] sont unitaires et irréductibles.
La fonction retourne le produit des facteurs irréductibles de A dans Z[X].
fonction remonter(C1 · · · Ct , A, q, k)
début
si t = 1 alors
retourner A
sinon
c := initial(A)
faire
partitionner le produit C1 · · · Ct en deux sous–produits F et G
F1 := le produit des éléments de F
G1 := le produit des éléments de G
à partir de la factorisation A = F1 G1 (mod q) calculer (avec le lemme de Hensel)
une factorisation A = Fk Gk (mod q k ) telle que Gk soit unitaire
Gk := c Gk (mod q k )
si Fk et Gk divisent c A dans Z[X] alors
Fk := pp(Fk )
Gk := pp(Gk )
trouvé := vrai
sinon
trouvé := faux
fin si
tant que non trouvé et que toutes les partitions possibles n’ont pas été considérées
si trouvé alors
retourner remonter(F , Fk , q, k) × remonter(G, Gk , q, k)
36
sinon
retourner A
fin si
fin si
fin
L’algorithme ci–dessus peut, dans le pire des cas, avoir un coût exponentiel en le degré
de A. En effet, il peut être amené à considérer les 2t partitions (2t−1 si on s’y prend intelligement) en deux sous–ensembles d’un ensemble de t éléments où t peut atteindre le degré
de A.
Bien que le pire des cas se produise rarement (l’algorithme semble avoir un coût polynomial en le degré de A ¡¡ en pratique ¿¿), on peut quand même accélérer sensiblement ¡¡
remonter ¿¿ en remontant d’abord modulo q k chacun des facteurs C1 , . . . , Ct avec le lemme
de Hensel et en énumérant ensuite les partitions. On évite ainsi d’exécuter un nombre exponentiel de fois la remontée de Hensel : l’étape la plus coûteuse.
En faisant effectuer un maximum de travail par la factorisation sans carrés (en utilisant
par exemple l’algorithme de la section 2.7.1), on améliore les performances de ¡¡ factoriser
¿¿.
Il existe une variante [9] de l’algorithme de factorisation ayant un coût polynomial en
le degré du polynôme à factoriser. Elle est rarement implantée parce que, sur la plupart
des exemples accessibles aux ordinateurs actuels, les algorithmes ayant un coût exponentiel
donnent de meilleurs résultats17 .
Mieux vaut une petite exponentielle qu’un gros polynôme !
Références
[1] Elwyn Ralph Berlekamp. Factoring polynomials over finite fields. Bell System Technical
Journal, 46 :1853–1859, 1967.
[2] Etienne Bézout. Cours de mathématiques à l’usage des Gardes du Pavillon et de la Marine,
volume III. Musier, Paris, 1766.
[3] Jean-Luc Chabert, Évelyne Barbin, Michel Guillemot, Anne Michel-Pajus, Jacques Borowczyk,
Ahmed Djebbar, and Jean-Claude Martzloff. Histoire d’algorithmes. Du caillou à la puce.
Belin, Paris, 1994.
[4] Michel Demazure. Cours d’algèbre. Primalité. Divisibilité. Codes. Cassini, Paris, 1997.
[5] Keith O. Geddes, Stephen R. Czapor, and George Labahn. Algorithms for Computer Algebra.
Kluwer Academic Publishers, 1992.
[6] Kurt Wilhelm Sebastian Hensel. Theorie der Algebraischen Zahlen. Teubner, Leipzig, 1908.
[7] Donald Erwin Knuth. The art of computer programming. Addison–Wesley, 1966. Second
edition.
[8] Edmund George Hermann Landau. Sur quelques théorèmes de M. Petrovic relatifs aux zéros
des fonctions analytiques. Bulletin de la Société Mathématique de France, 33 :251–261, 1905.
17
Il semble qu’il y ait du nouveau sur ce sujet.
37
[9] A. K. Lenstra, H. W. Lenstra, and L. Lovasz. Factoring polynomials with rational coefficients.
Math. Ann., 261 :515–534, 1982.
[10] Marie-Paule Malliavin. Algèbre commutative. Applications en géométrie et en théorie des
nombres. maı̂trise de mathématiques pures. Masson, Paris, 1985.
[11] Maurice Mignotte. An inequality about factors of polynomials. Mathematics of Computation,
28 :1153–1157, 1974.
[12] Maurice Mignotte. Mathématiques pour le calcul formel. Presses Universitaires de France,
Paris, 1989.
[13] Michel Queysanne. Algèbre. Premier cycle scientifique. Préparation aux grandes écoles. Collection U. Armand Colin, Paris, 1964.
[14] Tateaki Sasaki and Minoru Sasaki. On Integer–to–Rational Conversion Algorithm. SIGSAM
Bulletin, 26 :19–21, 1992.
[15] Josef Stein. Computational problems associated with Racah algebra. J. Comp. Phys., 1 :397–
405, 1967.
[16] Paul Shyh-Horng Wang. A p–adic algorithm for univariate partial fractions. In proceedings of
ACM SYMSAC’81, pages 212–217, 1981.
[17] Hans Julius Zassenhaus. On Hensel Factorization I. Journal of Number Theory, 1 :291–311,
1969.
38
Téléchargement