Factorisation des entiers

publicité
8
Chapitre
Chapitre 8.
Factorisation des
entiers
Le théorème fondamental de l’arithmétique affirme que tout entier naturel non nul et différent de 1
peut s’écrire de façon unique à l’ordre près comme produit de nombres premiers. Même ce résultat
semble acquis à partir d’Euclide, et communément utilisé par les mathématiciens, sa première
démonstration rigoureuse et complète figure dans les Recherches arithmétiques de Gauss, publiées en
1801.
Le problème que l’on se pose dans ce chapitre est donc le suivant : étant donné un entier naturel n,
comment peut-on obtenir sa décomposition en facteurs premiers, ou, plus simplement, comment peuton l’écrire de façon non triviale comment produit de deux ou plusieurs entiers naturels ?
Sommaire
Chapitre 8. Factorisation des entiers .................................................................. 117
1.
La méthode des divisions successives ................................................ 118
1.1 À la main… ..................................................................................... 118
2.
3.
1.2
Une fonction sur la TI-Nspire ....................................................... 119
1.3
Deux fois plus vite ? ...................................................................... 120
1.4
Connaissance de la forme des diviseurs ................................... 125
La méthode de Fermat ............................................................................ 126
2.1 Une lettre de Fermat ..................................................................... 126
2.2
Principe de la méthode ................................................................. 126
2.3
Améliorations de Fermat… .......................................................... 128
2.4
Des fonctions sur une TI-Nspire.................................................. 129
2.5
Quelques questions sur cet algorithme ..................................... 132
2.6
Encore plus loin avec Fermat ...................................................... 134
Autres algorithmes de factorisation ...................................................... 135
3.1 Méthode dite p – 1 de Pollard ...................................................... 135
3.2
Méthode de la poêle à frire .......................................................... 139
ANNEXE : quelques factorisations.................................................................. 147
Christian Vassard (IUFM Rouen)
118
Mathématiques et TI-Nspire
Si le problème de la factorisation d’un entier est simple pour des nombres de taille raisonnable1, il se
révèle en revanche très délicat, voire impossible à mener à son terme pour des entiers de quelques
dizaines de chiffres2. Ce n’est pas faute pourtant d’avoir un algorithme ! Encore faut-il, et c’est
l’occasion de le souligner, que l’algorithme en question retourne un résultat relativement rapidement3.
Voilà donc un problème, tout droit venu de la sphère « éthérée » des mathématiques pures, qui est
devenu en quelques années, notamment avec le développement d’Internet et des échanges sur la toile,
un enjeu économique et stratégique essentiel. La méthode de cryptographie RSA par exemple se
fonde sur l’impossibilité pratique de factoriser en un temps raisonnable un entier suffisamment grand 4
1. La méthode des divisions successives
1.1 À la main…
C’est celle que l’on pratique naturellement à la main, en testant a priori chaque nombre premier, l’un
après l’autre, pour savoir s’il divise le nombre entier considéré. Examinons l’exemple de 10 332 :
On balaie tous les diviseurs premiers potentiels depuis 2, en répétant si nécessaire la division pour
savoir avec quel exposant il divise le nombre. Évidemment, dans la pratique courante qui ne
s’intéresse qu’à des « petits » nombres, on utilise les célèbres critères de divisibilité (2, 3, 5 et 9 sont
élémentaires et très connus) : là, chacune des divisions a été faite par la calculatrice…
1
21 = … 3 × 7… sans aucune difficulté… mais 515 377 520 732 011 331 036 538 662 748 291 992 781 694 711 133 ?
2
En juin 2007, le plus grand entier jamais factorisé est un nombre de 307 chiffres. 11 mois de calculs informatiques ont été nécessaires…
3
Pour une TI-nspire, quelques heures de fonctionnement mettent rudement les piles à l’épreuve ! Et peut-on envisager de faire fonctionner
un ordinateur ne serait-ce que 150 ans ?
4
Et bien choisi, devrions-nous ajouter... pour résister notamment aux méthodes connues de factorisation.
© T³ France 2010 / Photocopie autorisée
Factorisation des entiers
119
1.2 Une fonction sur la TI-Nspire
Pour un programme sur une calculatrice, disons une fonction sur une TI-Spire, on ne connaît pas a
priori la répartition des nombres premiers. Le plus simple est alors de tester en fait tous les nombres
entiers, certains inutilement évidemment5.
Par ailleurs, la valeur de n, comme on l’a vu sur notre exemple, va en diminuant à chaque diviseur
obtenu, au fur et à mesure des divisions.
Toujours dans notre exemple, le dernier nombre obtenu, 41, qui, par construction, n’est divisible par
aucun diviseur premier inférieur à 7, est lui-même premier : inutile d’aller plus loin… On peut écrire
10332 = 2 × 2 × 3 × 3 × 7 × 41 : c’est la décomposition attendue.
Deux boucles While sont imbriquées : la première pour parcourir un à un tous les diviseurs possibles,
la seconde pour « épuiser » un diviseur donné.
L’on doit aussi résoudre le problème du résultat renvoyé. Sous quelle forme se présentera-t-il ? Deux
choix simples sont possibles : une liste ou, ce qui a eu notre préférence, une chaîne de caractères (on
rappelle que "&" concatène deux chaînes et que left(chaine,p) renvoie les p caractères de gauche de
chaine). Il faut penser à chaque diviseur trouvé à ajouter à la chaîne le caractère "*", symbolisant la
multiplication.
Si la valeur de n est strictement décroissante au cours du programme, l’arrêt peut se produire de deux
façons différentes :
soit avec n = 1 (par exemple en partant de n = 32), et l’on doit renvoyer la chaîne f, sans son
dernier caractère "*" ;
soit quand n est un nombre premier lui-même, comme dans l’exemple traité ; il faut alors
penser à concaténer cette valeur avec la chaîne f.
Le code de cette fonction est donné ci-après :
5
Ainsi il est inutile de tester 4, 6, 8… quand on a épuisé le diviseur 2…
© T³ France 2010 / Photocopie autorisée
120
Mathématiques et TI-Nspire
Les résultats sont bien ceux que l’on attend, mais ils ne sont guère rapides dès que le nombre grandit
un peu. Le temps de réponse peut alors devenir beaucoup plus long, voire prohibitif, au point que l’on
soit obligé d’arrêter le calcul : ainsi la factorisation du nombre de Fermat 232 + 1 demande 3,29
secondes avec une calculatrice ; pour 264 + 1, qui ne comporte que (!) 20 chiffres, j’ai renoncé au bout
de 30 minutes avec la TI-Nspire mais le logiciel a renvoyé un résultat en quelques minutes. Le logiciel
à son tour ne renvoie rien pour le nombre de Fermat suivant (appui prolongé sur F12 pour interrompre
le calcul. Quant à la dernière factorisation Ŕ elle concerne quand même un nombre de 32 chiffres
avec, c’est vrai des facteurs premiers assez petits Ŕ elle se fait en 1 minute 14 secondes à la
calculatrice.
Bref les performances sont très rapidement assez médiocres, comme on pouvait le craindre. Sauf
exception, il n’est pas question de se lancer dans la factorisation d’un nombre de quelques dizaines de
chiffres.
1.3 Deux fois plus vite ?
 Des améliorations s’imposent, surtout que l’écriture, on s’en doute un peu, est bien loin d’être
optimisée. Ainsi, il n’est pas utile de tester les nombres pairs quand on a testé, et épuisé, le facteur 2 :
on peut donc à moindre frais tester 2, puis 3 et puis tous les nombres de 2 en 2. De quoi, on peut
l’espérer, gagner la moitié du temps de traitement !
La fonction suivante procède de cette façon :
© T³ France 2010 / Photocopie autorisée
Factorisation des entiers
121
Le gain en temps est important : balayant la moitié des nombres, on va globalement deux fois plus vite
avec cette nouvelle fonction, ce qui était prévisible. Ainsi la factorisation de
1032 Ŕ 1 prend cette fois 36 secondes.
 On peut sans doute encore faire mieux en restreignant encore les nombres balayés. On sait qu’à
partir de 5, les nombres premiers sont de la forme 6k + 1 ou 6k + 5. Une fois les cas de 2 et 3 traités
dans une boucle à part, les diviseurs à tester sont donc tous de la forme 6k + 1 ou 6k + 5. Remarquons
que l’on passe de l’une à l’autre de ces formes en ajoutant alternativement 2 et 4 au diviseur (5,
5+2=7, 7+4=11, 11+2=13, etc.). Cela donne la fonction fact2 qui suit.
La première boucle gère, comme on l’a dit, les deux facteurs 2 et 3.
Dans la deuxième boucle, on passe en revue successivement tous les nombres impairs, 5, 7, 11, etc. de
la forme 6k + 1 et 6k + 5.
Si d divise n, comme précédemment, on regarde combien de fois c’est le cas dans une deuxième
boucle imbriquée dans la première, et on ajoute à chaque fois les caractères "d*" à la chaîne c.
On ajoute à chaque fois l’expression e + 3 qui vaut bien alternativement 2 et 4, selon que e soit égal à
Ŕ1 ou 1. La valeur de e est modifiée par une multiplication par Ŕ1 à chaque passage dans la boucle.
S’il est intéressant de mettre en œuvre ces améliorations, par souci d’efficacité, le résultat est
décevant car les performances restent à peu de choses près équivalentes à celles de la fonction
précédente. Il semble que ce que l’on gagne dans l’efficacité, on le perde dans la complexité du code.
La fonction test suivante factorise les n entiers impairs qui suivent 1010. Les tests suivants ont été
effectués avec n = 1 500 sur un ordinateur portable de type Acer :
avec fact0, cela a pris environ 100 secondes ;
avec fact1, environ 50 secondes, soit deux fois moins de temps ;
avec fact2, à peine moins de 50 secondes aussi.
© T³ France 2010 / Photocopie autorisée
122
Mathématiques et TI-Nspire
Par contre, certains entiers6 résistent envers et contre tout, même avec notre programme le plus
performant, comme par exemple 2 379 126 835 648 834 186 983 062 873 057, qui possède 31
chiffres : sur une calculatrice, le calcul a été interrompu au bout de quelques minutes, sans résultat. La
question est donc de savoir s’il faut persévérer ou pas : peut-on avoir une réponse dans un temps
raisonnable ?
Que se passe-t-il pour ce grand entier ? Le logiciel TI, et la fonction Factor7, peut venir à notre
secours :
Ce nombre possède comme facteur deux grands nombres premiers, chacun de 16 chiffres. Sa
factorisation est-elle définitivement inaccessible à nos fonctions de factorisation par divisions
successives ? That is the question...
La question est de savoir combien de divisions par seconde effectue notre calculatrice pour des
nombres d’une vingtaine de chiffres. La fonction test, qui effectue 10 000 « grosses » divisions avec
un dividende de 32 chiffres, se déroule en… 12 secondes8.
On peut donc considérer très sommairement que la calculatrice effectue en une seconde à peu près
800 divisions. Nous avons bien conscience que le résultat est très grossier : ce qui nous importe, c’est
de raisonner en ordre de grandeur.
6
1020 + 2 aussi, mais dans une moindre mesure… Cet entier est plus simple mais possède 4 facteurs premiers, dont 2 et 3. La réelle
difficulté est de trouver les deux autres.
7
Quand même plus d’une minute 20 seconde sur l’ordinateur… Avec l’unité nomade de très longues dizaines de minutes sans doute. Je n’ai
pas essayé !
8
Assez incroyable pour une « banale » calculatrice !
© T³ France 2010 / Photocopie autorisée
Factorisation des entiers
123
Nous sommes en mesure d’estimer un ordre de grandeur, même grossier, du temps nécessaire à l’unité
nomade pour factoriser n = 2 379 126 835 648 834 186 983 062 873 057 avec fact1, une de nos deux
fonctions rapides.
Le facteur 2 est testé : c’est quasi-immédiat. Sinon seront testés tous les nombres impairs compris
entre 3 et n , soit 7,7 × 1014 divisions…
… au rythme de 800 par seconde. La calculatrice mettra donc 9,6  1011 secondes, ou 1,1  107 jours
soit finalement 30 569 années !
Autant dire que le problème est insurmontable, en tout cas avec l’algorithme des divisions
successives. Pas la peine d’en savoir plus, nous sommes contraints de renoncer !
Quant à l’ordinateur, le mien en tout cas, plus rapide qu’une calculatrice, il demande 10 secondes
pour faire 1 million de divisions, soit 100 000 divisions à la seconde : il est donc environ 125 plus
rapide que la calculatrice. Il mettrait 125 fois moins de temps, c’est-à-dire à peu près deux siècles et
demi ! Ce n’est pas non plus raisonnable.
Autant dire que cela condamne à tout jamais la méthode des divisions successives pour des entiers à
partir de 20 ou 30 chiffres.
© T³ France 2010 / Photocopie autorisée
124
Mathématiques et TI-Nspire
En conclusion, la méthode des divisions successives, si elle conduit imparablement en théorie au
résultat attendu, demande pour des entiers finalement de taille assez modeste, des temps de traitement
rédhibitoires. Il faut trouver d’autres algorithmes si l’on veut être performant pour factoriser de grands
entiers.
 Signalons pour finir que l’on peut aussi écrire une fonction qui améliore la présentation du
résultat, en regroupant les mêmes nombres premiers dans une écriture avec exposants. La structure est
exactement la même que celle du programme précédent, à ceci près qu’un compteur ct compte
combien de fois un facteur premier divise l’entier : si ct est strictement supérieur à 1, on utilise alors
l’exposant "^" ; si ct = 1, on reprend la mise en forme précédente. Attention à ce qu’il ne se passe
rien quand ct vaut 0 car la boucle est parcourue quoiqu’il arrive pour d = 2 puis pour d = 3 (c’est la
raison pour laquelle n’a pas été employé if then else).
La présentation est plus lisible et plus conforme à ce que l’on attend habituellement :
© T³ France 2010 / Photocopie autorisée
Factorisation des entiers
125
1.4 Connaissance de la forme des diviseurs
La méthode des divisions successives peut, dans certains cas, rester relativement efficace lorsqu’on a
affaire à des entiers dont les diviseurs premiers ont des formes précises. Ainsi les nombres de
Mersenne, du type 2 p  1 avec p premier, ont des diviseurs premiers de la forme 1 + 2kp où k est un
entier naturel, ce qui revient à tester dans leur cas les entiers de 2p en 2p. Gain appréciable…
On peut donc écrire une fonction, qui ne peut servir qu’à factoriser les nombres de Mersenne, mais
qui sera bien plus efficace que la méthode des divisions successives initiale. Il suffit d’ailleurs
d’adapter la fonction fact0 que nous avons écrite au début du chapitre.
On obtient assez facilement des factorisations de nombres de Mersenne, quand ils sont composés mais
cela devient de plus en plus difficile dès qu’ils sont premiers. En plus, les nombres de Mersenne
croissent très vite en taille ; l’avantage que l’on a à connaître la nature de leurs diviseurs premiers
s’efface très vite face à la grandeur du nombre à gérer.
En particulier, 283 Ŕ 1 pose un problème redoutable : il est le produit de 167 par un nombre premier de
grande taille… et il a fallu interrompre le calcul…
© T³ France 2010 / Photocopie autorisée
126
Mathématiques et TI-Nspire
2. La méthode de Fermat
2.1 Une lettre de Fermat
En 1643, le père Mersenne met au défi Fermat de factoriser le nombre entier 100 895 598 169. Défi
que nous aurions pu aisément relever avec notre TI-Nspire… les temps changent !
Fermat répond par une lettre au Père Mersenne, en proposant une méthode de factorisation, qu’il
applique à un autre entier, et dont il explique le principe dans la lettre suivante.
Cette lettre est extraite des Œuvres, éd.Tannery et Henry, tome II, 1894, Lettre de 1643, pp. 257-258
et est citée par l’excellent Histoire d’algorithmes, Editions Belin, 1994, page 300.
Cela posé, qu'un nombre me soit donné, par exemple 2 027 651 281, on demande s'il est
premier ou composé, et de quels nombres il est composé, au cas qu'il le soit. J'extrais la
racine, pour connaître le moindre des dits nombres, et trouve 45 029 avec 40 440 de reste,
lequel j'ôte du double plus 1 de la racine trouvée, savoir de 90 059 : reste 49 619, lequel n'est
pas carré, parce qu'aucun carré ne finit par 19, et partant je lui ajoute 90 061, savoir 2 plus
que 90 059 qui est le double plus 1 de la racine 45 029. Et parce que la somme 139 680 n'est
pas encore carrée, comme on le voit par les finales, je lui ajoute encore le même nombre
augmenté de 2, savoir 90 063, et je continue ainsi d'ajouter tant que la somme soit un carré,
comme on peut voir ici. Ce qui n'arrive qu'à 1 040 400, qui est carré de 1 020, et partant le
nombre donné est composé; car il est aisé, par l'inspection des dites sommes, de voir qu'il n'y
a aucune qui soit nombre carré que la dernière, car les carrés ne peuvent souffrir les finales
qu'elles ont, si ce n'est 499 944 qui néanmoins n'est pas carré. Pour savoir maintenant les
nombres qui composent 2 027 651 281, j'ôte le nombre que j'ai premièrement ajouté, savoir
90 061, du dernier ajouté 90 081. Il reste 20, à la moitié duquel plus 2, savoir à 12, j'ajoute la
racine premièrement trouvée 45 029. La somme est 45 041, auquel nombre ajoutant et ôtant
1020, racine de la dernière somme 1 040 000, on aura 46 061 et 44 021, qui sont les deux
nombres plus prochains qui composent 2 027 651 281. Ce sont aussi les seuls, parce que l'un
et l'autre sont premiers.
2.2 Principe de la méthode
Ce texte est écrit sans aucun symbolisme algébrique, ce qui ne facilite pas sa compréhension.
Essayons, avant d’entrer dans les détails, d’expliquer la démarche globale de Fermat, qui cherche à
factoriser N = 2 027 651 281. Ce n’est pas le nombre proposé par le Père Mersenne 9 mais un entier
sur mesure pour la méthode décrite.
9
Fermat donne la factorisation demandée par Mersenne dans une autre lettre de 1643 :
« (…) je vous réponds que le dernier de ces nombres est composé et se fait du produit de ces deux : 898 423 et 112 303, qui sont
premiers ». Voir http://iremp7.math.jussieu.fr/up/factorisations_de_grands_nombres.pdf.
© T³ France 2010 / Photocopie autorisée
Factorisation des entiers
127
L’idée de Fermat, simple et lumineuse, est de tenter d’écrire N comme une différence de deux carrés10
et de factoriser par l’identité remarquable bien connue11.
Or si N = a2 Ŕ b2, alors a2 = N + b2 > N. Par conséquent a est nécessairement strictement supérieur à
N . Fermat commence donc par extraire la racine carrée entière de N et trouve 45 029 avec pour
reste 40 440. Autrement dit : N = 45 0292 + 40 440.
« J'extrais la racine, pour connaître le moindre des dits nombres, et trouve 45 029 avec
40 440 de reste »
Maintenant, il reste à tester un par un tous les nombres entiers à partir de a = 45 030 > 45 029 : il
s’agit donc à chaque fois d’examiner si d = a2 Ŕ N est ou non le carré d’un entier ; si tel est le cas, une
factorisation est possible. La mise en œuvre sur le tableur est classique :
Dès que d  a 2  N est un carré, la factorisation est immédiate :
N = a2 Ŕ d = a2 Ŕ b2 = (a Ŕ b)(a + b)
= (45 041 Ŕ 1 020)(45 041 + 1 020) = 44 021 × 46 061
« on aura 46 061 et 44 021, qui sont les deux nombres plus prochains qui composent
2 027 651 281 »
Remarquons que les deux facteurs obtenus ne sont pas forcément premiers. On peut, si on le souhaite,
appliquer sur chacun d’eux une méthode de factorisation. C’est d’autant plus facile qu’ils sont
beaucoup moins grands que N.
Rien que de très classique dans cette feuille de calcul. Commentons rapidement les formules utilisées.
Le nombre est placé en A1 puis mémorisé dans une variable n. La cellulle A4 calcule la partie entière
de la racine carrée de n et y ajoute 1 (=int(sqrt(n))+1) : c’est le point de départ de nos itérations.
Cette valeur est recopiée en B2.
10
C’est donc toujours possible pour un entier impair.
11
C’est pour cela que l’on peut affirmer que 9991 = 104 Ŕ 32 = 103 × 97.
© T³ France 2010 / Photocopie autorisée
128
Mathématiques et TI-Nspire
En B3, on met la valeur de B2, augmentée de 1 (=b2+1), puis on recopie sur quelques dizaines de
lignes : ceci donne les valeurs successives de a.
Dans B3, on met =B32-n : ce sont les nombres d dont on doit tester si ce sont des carrés d’entiers.
Comme plus haut, on recopie vers le bas.
Le test est réalisé dans la colonne D. En D2, on saisit :
=when((int(sqrt(c2)))^(2)=c2,sqrt(c2),void,void)
puis on recopie vers le bas. Ne nous intéresse que le cas où le nombre est un carré… Dans ce cas, et
uniquement dans ce cas, une factorisation peut être obtenue.
Le premier facteur est :
=when(not isvoid(d2),b2-d2,_,_)
et le second
=when(not isvoid(d2),b2+d2,_,_).
2.3 Améliorations de Fermat…
Fermat, qui n’avait que sa plume et sa tête Ŕfort bien faite au demeurantŔ, cherche à effectuer le
moins possible de calculs, comme souvent à son époque bien plus que maintenant. En particulier, il
évite systématiquement les élévations au carré.
Ainsi pour obtenir le premier d, celui qui correspond à a = 45 030, il s’appuie sur l’écriture :
N = 45 0292 + 40 440
en remarquant que :
d = 45 0302 Ŕ N = 45 0302 Ŕ 45 0292 Ŕ 40 440 = 2 × 45 029 + 1 Ŕ 40 440
soit d = 49 619… qui de plus n’est pas un carré… car il se termine par 19 !
« et trouve 45 029 avec 40 440 de reste, lequel j'ôte du double plus 1 de la racine trouvée,
savoir de 90 059 : reste 49 619, lequel n'est pas carré, parce qu'aucun carré ne finit par 19 »
Ensuite, à une étape donnée, on dispose de a2 et on vérifie si d = a2 Ŕ N est le carré d’un entier. À
l’étape suivante, on doit vérifier cette fois que d’ = (a + 1)2 Ŕ N est le carré d’un entier.
Or d’ = (a + 1)2 Ŕ N = a2 + 2a + 1 Ŕ (a2 Ŕ d) = 2a + 1 + d
Ainsi la deuxième valeur de d est 49 619 + (2 × 45 030 + 1) = 139 680.
« et partant je lui ajoute 90 061, savoir 2 plus que 90 059 qui est le double plus 1 de la racine
45 029 »
Tenant compte des remarques qui précèdent, on peut modifier la feuille de calcul précédente pour
celle qui est donnée à la page suivante. On propose d’effectuer le test un nombre de fois paramétré par
la variable k de la cellule A10.
En A4 figure la racine carrée entière du nombre considéré et en A6 le reste, au sens de Fermat
(=n–a42).
Dans la colonne B, on indique avec seq les éléments a successifs à tester. D’après les remarques de
Fermat, la colonne C est égale à 2*B[]+1. On sait que D1 vaut =2*a4+1–a6 et la formule en D2 est
visible sur la figure ci-après.
© T³ France 2010 / Photocopie autorisée
Factorisation des entiers
129
En E1, on a saisi =when((int(√(d1)))^(2)=d1,int(√(d1)),_,_), puis recopié sur 500 lignes. Enfin en
F1, on tape =when(not isvoid(e1),b1,_,_) et on recopie sur le même nombre de lignes que
précédemment. Contrairement aux formules précédentes, les formules ne sont pas gérées par des seq,
ce qui explique la limitation à 500 qu’on indique en A10.
La factorisation, si elle a été obtenue, peut être reconstituée dans les cellules A12 et A14 : en A12, on
a saisi =min(E[])–min(F[]) et en A14, =min(E[])–min(F[]).
Enfin, last but not least, Fermat met de côté tous les nombres dont les « finales », ici les deux derniers
chiffres, ne sont pas ceux d’un carré…
« car il est aisé, par l'inspection des dites sommes, de voir qu'il n'y a aucune qui soit nombre
carré que la dernière, car les carrés ne peuvent souffrir les finales qu'elles ont, si ce n'est 499
944 qui néanmoins n'est pas carré »
… un carré qui se termine obligatoirement par 0, 1, 4, 5, 6, 9 ou par 00, 01, 04, 09, 16, 21, 24, 25, 29,
36, 41, 44, 49, 56, 61, 64, 69, 76, 81, 84, 89, 96.
Les seuls nombres d susceptibles d’être des carrés sont donc 499 944 (mais il n’en est pas un), puis
1 040 400 qui, lui, est bien le carré de 1020 et l’algorithme peut s’arrêter.
« Ce qui n'arrive qu'à 1 040 400, qui est carré de 1 020 »
Pour l’exemple considéré, l’algorithme est bien plus performant que celui des divisions successives
(qui aurait demandé environ 22 000 divisions avant de faire apparaître le facteur 44 021) : cela est dû
au fait que les deux facteurs de N sont proches de N.
Mais cette feuille de calcul ne permet pas de résoudre le problème posé initialement par Mersenne à
Fermat, concernant la factorisation de 100 895 598 169, même avec 500 essais : on peut craindre que
les facteurs premiers soient éloignés de la racine carrée du nombre.
2.4 Des fonctions sur une TI-Nspire
On peut écrire une fonction, avec pour paramètre d’entrée le nombre n que l’on cherche à factoriser.
Cette fonction renvoie la factorisation de l’entier n sous forme d’une chaîne de caractères (par
exemple "44021*46061"), chacun des facteurs n’étant pas forcément premier.
© T³ France 2010 / Photocopie autorisée
130
Mathématiques et TI-Nspire
Il faut être prudent avec int(sqrt(n)), qui recèle en fait quelques surprises. Si le calcul de la racine est
mené de façon exacte, formel, même pour un grand nombre entier, des erreurs peuvent apparaître
quand on en prend la partie entière. C’est ce que l’on observe en observant le détail des deux calculs
suivants :
Le premier calcul conduit à un résultat correct, comme le montre l’encadrement obtenu à la fin.
Le deuxième est plus surprenant : l’encadrement est cette fois-ci faux et l’on comprend pourquoi
lorsque l’on connaît la véritable valeur (dernière ligne).
Approfondissons avec un entier un peu plus grand encore.
On observe que tout se passe comme si le résultat renvoyé pour int(√()) n’était autre que son écriture
décimale approchée, résultat donc entaché d’erreur lorsque l’on dépasse la capacité de la calculatrice.
Par contre, la fonction intrc de la bibliothèque calculs fournit un résultat fiable pour des entiers plus
grands12.
En revenant à l’écriture de notre fonction, on peut signaler que le test pour vérifier qu’un nombre est
un carré fonctionne sans problème, même pour un entier très grand.
Une première version du programme, reprenant les idées de la première feuille de calcul, est donnée
ci-après :
12
Nous verrons dans un chapitre ultérieur comment une telle fonction peut être écrite à l’aide de l’algorithme de Héron.
© T³ France 2010 / Photocopie autorisée
Factorisation des entiers
131
Testons cette première fonction : la TI-Nspire renvoie presque instantanément le premier résultat,
c’est celui de Fermat, et le deuxième. Le troisième demande 6 secondes, et le quatrième 30 secondes,
des temps très honorables par rapport à ce qu’aurait demandé la méthode des divisions successives…
On peut encore améliorer le temps de calcul… en suivant les conseils de Fermat : judicieux à son
époque, ils le sont toujours avec les moyens de calcul puissants du XXIe siècle.
D’abord ses remarques pour le passage d’une étape à la suivante... Quelques élévations au carré
inutiles épargnées…
Ensuite, point n’est besoin de vérifier que d est un carré que si son dernier chiffre est 0, 1, 4, 5, 6, 9.
Dans la moitié des cas, on s’épargnera ainsi un calcul assez lourd, celui de la racine carrée, quand il
n’est pas nécessaire. D’autre part, on peut changer l’instruction qui teste si le nombre est un carré : on
utilise fpart(sqrt(a))=0. En mode exact, cette instruction semble tout à fait convenir :
On utilise cette fois une boucle Loop, Ŕdont on sort par l’instruction ExitŔ boucle qui va permettre de
gérer le double test, soit le dernier chiffre, soit le calcul de la racine carré. Le dernier chiffre est testé
avec mod(d,10) : si ce dernier chiffre ne peut pas être celui d’un carré, on passe directement aux
valeurs suivantes de a et d ; sinon on teste effectivement si fpart(sqrt(a))=0, qui provoquera la sortie
de la boucle (Exit) puis l’affichage des résultats.
© T³ France 2010 / Photocopie autorisée
132
Mathématiques et TI-Nspire
On obtient alors le programme suivant
Les mêmes exemples que précédemment sont globalement traités en deux fois moins de temps (3
secondes pour le troisième au lieu de 6 secondes et 13 secondes au lieu de 30 pour le quatrième… le
gain est appréciable).
Notons qu’en testant les carrés modulo 4 Ŕ ils sont forcément congrus à 0 ou 1Ŕ plutôt que modulo 10,
on gagne encore une poignée de secondes.
On peut factoriser par cette méthode le nombre donné plus haut dans une remarque, à savoir
515 377 520 732 011 331 036 538 662 748 291 992 781 694 711 133.
La réponse, même avec la calculatrice est donnée immédiatement.
soit la factorisation "717897987691852588770277*717897987691852588770329".
2.5 Quelques questions sur cet algorithme
Tout d’abord, s’arrête-t-il toujours ?
La méthode est intéressante pour un entier impair. Pour un entier pair que l’on cherche à factoriser, on
commence évidemment par le facteur 2, autant de fois que possible.
On sait que tout nombre impair N (N > 1) s’écrit d’au moins une façon comme une différence de deux
carrés. En effet :
 N 1
2
 N 1 
2
N = 2n + 1 = (n + 1)2 Ŕ n2 = 
 

 2   2 
En fait cette égalité ne donne pas une factorisation intéressante de N (on récupère la factorisation
triviale N = 1 × (2n + 1)). En revanche, elle garantit l’arrêt de l’algorithme, au pire, au moment où a
N+1
vaudra
.
2
© T³ France 2010 / Photocopie autorisée
Factorisation des entiers
133
Dans le cas où l’algorithme s’arrête à ce moment, c’est que l’entier N est premier. Plus précisément,
Édouard Lucas a prouvé au XIXe siècle le théorème suivant :
Pour qu’un nombre impair soit premier, il faut et il suffit qu’il soit, et d’une seule manière,
égal à la différence des carrés de deux nombres entiers.
Démonstration
Soit N un entier premier impair. Supposons-le écrit sous la forme d’une différence de deux carrés :
N = x2 Ŕ y2.
On en déduit une factorisation de N :
N = (x Ŕ y)(x + y).
Comme N est premier, on a nécessairement x Ŕ y = 1 et x + y = N, soit x =
N+1
NŔ1
et y =
et l’on
2
2
retrouve la décomposition indiquée plus haut.
Donc N s’écrit de façon unique sous la forme d’une différence de deux carrés.
Réciproquement, soit un entier impair N composé, s’écrivant sous la forme p  q de façon non
triviale. Mettons en évidence deux écritures de N comme différence de deux carrés.
La décomposition précédente reste toujours valable.
D’autre part, on peut aussi écrire N = pq = x2 Ŕ y2 en posant x = p + q et y = p Ŕ q. Cette
2
2
décomposition n’est pas la même que la première (sinon, on aurait p + q = N + 1 et p Ŕ q = N Ŕ 1,
donc p = N et q = 1, mais on a supposé que ces facteurs étaient non triviaux).
(Le texte de Lucas, tiré de son célèbre livre La Théorie des nombres, de 1891)
Remarquons que si n est pair, l’algorithme peut :
soit s’arrêter (par exemple pour 100 qui est égal à 262 Ŕ 242)
soit encore ne jamais s’arrêter (par exemple pour 6, qui ne peut pas s’écrire comme différence
de deux carrés).
© T³ France 2010 / Photocopie autorisée
134
Mathématiques et TI-Nspire
Mais ce qui nous intéresse ici, c’est la factorisation : face à un nombre pair, en divisant par 2 autant de
fois que nécessaire, on se ramènera dans tous les cas à la factorisation d’un nombre impair.
Combien cet algorithme demande-t-il d’étapes ?
Considérons un entier N que l’on a factorisé par cette méthode :
N = a2 Ŕ b2 = p × q avec p > q, p = a + b et q = a Ŕ b.
On a donc a = p + q et b = p Ŕ q
2
2
N et l’on augmente à chaque fois d’une unité jusqu’à arriver à a = p + q.
2
Le nombre d’étapes est la partie entière de :
On part de l’entier qui suit

p N
pq
1
N
p2  N  2 p N
 N   p  N 

2
2
p
2p
2p

2
Plus p est proche de N, plus le nombre d’étapes nécessaires est petit. C’est le cas dans les exemples
que nous avons donnés13. Dans le cas contraire, le nombre d’étapes peut être beaucoup plus grand que
pour les divisions successives.
2.6 Encore plus loin avec Fermat
La méthode de Fermat est particulièrement efficace, on l’a remarqué, lorsque l’un des facteurs est très
proche de la racine carrée de N. Peut-on s'arranger pour que ce soit le cas ?
Revenons sur l’exemple proposé par Mersenne à Fermat pour la factorisation de 100 895 598 169 : il
ne se factorise pas facilement avec la méthode de Fermat 14. Supposons que l’on sache qu’il s’écrit
p 1
sous la forme p  q , avec p < q et  . On a donc 7 p  q .
q 7
Il n’en faut pas plus pour avancer…
Considérons maintenant N  7 1  7 p  q : 7N est bien un entier impair (c’est un point important),
produit de deux entiers très voisins. On peut donc appliquer la méthode de Fermat :
L’on obtient alors la factorisation en moins de 10 secondes !
En général, on ne connaît pas le rapport qui a été donné plus haut : rien n’interdit d’essayer
différentes valeurs. Si le nombre a de nombreux facteurs, on peut en obtenir quelques-uns ainsi.
L’algorithme de Lerman s’appuie sur ce principe.
13
Dont l’exemple de Fermat.
14
La calculatrice ne renvoie rien d’intéressant dans un temps raisonnable.
© T³ France 2010 / Photocopie autorisée
Factorisation des entiers
135
3. Autres algorithmes de factorisation
3.1 Méthode dite p – 1 de Pollard
Le mathématicien britannique Pollard a mis au point cette méthode de factorisation des entiers en
1974, à peu près en même temps qu’un autre algorithme que nous étudierons juste après.
L’algorithme p Ŕ 1 de Pollard fonctionne très efficacement avec des nombres de taille raisonnable, et
qui plus est, il est simple à comprendre et facile à programmer. Pour toutes ces raisons, une fois
épuisée la classique et éprouvée méthode des divisions successives, c’est souvent l’algorithme que
l’on utilise quand on cherche à factoriser un nombre composé.

Principe de l’algorithme
On suppose que le nombre n à factoriser possède un facteur premier p tel que les nombres premiers
divisant p Ŕ 1 soient tous petits, disons par exemple inférieurs à 10 000 (ou toute autre borne qu’on
voudra bien se fixer en fonction de la puissance de son outil de calcul). Plus précisément, on
supposera dans la suite que p Ŕ 1 divise 10 000!.
Cette dernière condition, importante pour le fonctionnement de l’algorithme, n’est pas si souvent
réalisée, d’autant moins que n devient grand. Cependant il suffit qu’elle le soit pour un des facteurs
premiers de n, ce qui permet dans l’ensemble de couvrir des entiers n de taille respectable, comme le
montrent les exemples qui suivent :
Nous supposerons donc que n s’écrit sous la forme n = pp’, avec p entier premier tel que p Ŕ 1 divise
10 000! et p’ entier naturel quelconque. Comme on cherche à factoriser n, l’entier p, pas plus que p’,
ne sont connus…
© T³ France 2010 / Photocopie autorisée
136
Mathématiques et TI-Nspire
L’idée de l’algorithme p Ŕ 1 de Pollard est très simple : on effectue de proche en proche le calcul
modulo n de 210000! :
10000!
2
 
10000
  1 2 3 4... 
  2   

 

.
En posant m  mod  210000! , n  , on peut écrire :
210000!  qn  m  qpp ' m
ce qui permet aussi d’affirmer que :
210000!  m (mod p)
(1)
En d’autres termes, du fait que n est un multiple de p, on peut passer de la congruence modulo n à la
congruence modulo p.
Mais p étant par hypothèse un nombre premier, le petit théorème de Fermat permet d’affirmer que :
2 p 1  1(mod p) .
Comme 10 000! est un multiple de p Ŕ 1, on a aussi :
210000!  1(mod p)
(2)
Le rapprochement des congruences (1) et (2) montre que :
m  1 (mod p)
d’où il ressort que p divise m Ŕ 1.
Comme p divise à la fois m Ŕ 1 et n, il divise pgcd(mŔ1,n). En d’autres termes, ce pgcd, dont le calcul,
faut-il le rappeler, est très efficace, fournira un facteur non trivial de n si l’on a de la chance, ou n luimême parfois, ce qui n’apporte rien…

Étude avec l’application Tableur et listes
Dans la pratique, il n’est pas nécessaire d’aller jusqu’à 10 000! pour obtenir un résultat. On peut à
chaque étape calculer m, et le pgcd qui correspond, pour le cas échéant en déduire un facteur de n.
À l’aide d’une feuille de calcul, examinons ce qui se passe sur un cas particulier pas trop grand, par
exemple, 10 001 :
l’entier est rentré en A1, et mémorisé dans une variable n ;
dans la colonne B, on entre tous les entiers de 1 à 100 avec seq ;
dans la colonne C, de C1 à C100, on effectue les calculs successifs de 2 1, puis (21)2, ((21)2)3
etc. modulo n : on peut par exemple saisir en C2 la formule15 : =mod(c1^(b2),n) ;
en D2, il reste à calculer gcd(c2–1,n), puis à recopier vers le bas.
Le résultat ici montre un facteur, premier, de 10 001, à savoir 73, que l’on obtient à partir de 26! .
L’entier p que l’on cherche divise à la fois m Ŕ 1 = 1 168 et 10 001, donc leur pgcd qui vaut 73. Voilà
mis en évidence ce qu’on cherchait, c’est-à-dire un diviseur de n. Une factorisation est donc :
10 001 = 73  137.
Chacun des facteurs obtenus est bien ici premier16.
15
Le programme d’exponentiation modulaire peut être utilisé ici pour s’affranchir des limitations de la fonction mod.
16
Mais ce n’est pas obligatoire… Sinon, on recommence à partir des facteurs obtenus, plus petits, auxquels on essaie d’appliquer une
méthode de factorisation…
© T³ France 2010 / Photocopie autorisée
Factorisation des entiers
137
On remarque aussi que la suite des pgcd (colonne D) est croissante au sens large. En effet, il est clair
que si d divise mod(k!,n) et n, alors nécessairement d divise aussi mod((k+1)!,n) et n.
Dans certains cas, semble-t-il rares, on peut « rater » un diviseur, comme le montre l’exemple suivant
(image de gauche) ; signalons qu’en travaillant avec 3 plutôt que 2, on récupère cette fois le diviseur
manquant 13 (image de droite).

Écriture d’une fonction
La fonction qui suit tient compte de notre étude précédente. Contrairement à ce que nous avons fait
dans le tableur, on ne teste le pgcd que toutes les 10 étapes (on peut changer si nécessaire cette valeur
dans le programme, soit pour l’augmenter, ou pour la diminuer, 10 semble être un compromis
raisonnable). D’autre part, les calculs des puissances successives se font avec 2, mais on pourrait
utiliser tout autre nombre comme 3 ou 18. Par commodité, ce nombre a été choisi pour être le
© T³ France 2010 / Photocopie autorisée
138
Mathématiques et TI-Nspire
deuxième argument de la fonction, le premier étant l’entier que l’on cherche à factoriser. Le code est
le suivant :
Testons cette fonction avec les différents nombres entiers évoqués au début du chapitre. Avec
34 563 298 729 527 654 368, on récupère dans un temps très court pas moins de 3 facteurs non
triviaux qui conduisent à la factorisation complète de cet entier de 20 chiffres :
Pour 1030 + 1, on récupère très rapidement les facteurs 6161, 9901, 3541 et 27961, pas tous premiers,
mais notre fonction échoue à trouver un facteur à
© T³ France 2010 / Photocopie autorisée
1030  1
:
6161 9901 3541  27961
Factorisation des entiers
139
Le quotient de tous ces nombres est pourtant un nombre composé… La méthode de Fermat ne donne
rien… sauf si comme on l’a vu plus haut, on multiplie par 9… on peut alors considérer que la
factorisation est terminée :
D’autres résultats montrent l’étonnante efficacité de cette méthode, pourtant très simple, avec des
temps de traitement très courts :
Voici une factorisation complète de 1040 + 1 :
La méthode p Ŕ 1 de Pollard induit des restrictions dans le choix des entiers qui interviennent dans le
cryptage RSA : faire intervenir des nombres premiers p et q tels que p Ŕ 1, ou q Ŕ 1, possède de petits
facteurs premiers est fortement contre-indiqué ! On comprend aisément pourquoi !
3.2 Méthode de la poêle à frire

… encore appelée méthode  de Pollard… le même mathématicien que précédemment…
Tout commence par une belle idée, si belle qu’on la dirait sortie d’un livre de philosophie :
© T³ France 2010 / Photocopie autorisée
140
Mathématiques et TI-Nspire
« Tout processus fini est ultimement périodique ».
Mettons de côté, au moins pour aujourd’hui, les implications philosophiques de cette maxime :
contentons-nous de faire de l’arithmétique… et de la cuisine en quelque sorte, s’il faut en croire le
titre de la méthode…
Il nous faut donc d’abord un processus : par exemple l’application définie par f(x) = x2 Ŕ 1.
Pour que ce processus soit fini, nous nous placerons dans les congruences modulo 17 : plus
précisément, considérons la suite définie par

 x0  2


 xn 1  mod  f  xn  ,17 
où mod(f(xn),17) désigne comme d’habitude le reste dans la division de f  xn  par 17.
Les premiers termes de cette suite peuvent être obtenus très facilement avec le tableur de la TINspire :
soit avec les notations utilisées :
x0
x1
x2
x3
x4
x5
x6
x7
x8
x9
x10
2
3
8
12
7
14
8
12
7
14
8
On voit apparaitre une période 8, 12, 7, 14. Le petit dessin ci-dessous explique pourquoi on parle ici
de poêle à frire.
x3 = 12
x2 = 8
x0 = 2
x4 = 7
x1 = 3
x5 = 14
© T³ France 2010 / Photocopie autorisée
Factorisation des entiers
141
Sans entrer dans les détails, on peut dire que la périodicité résulte du célèbre principe des tiroirs : au
bout d’au plus 18 itérations, peut-être moins, on peut être sûr que deux des termes de la suite (xn) sont
égaux modulo 17 et la même succession de calculs va se reproduire indéfiniment.
On définit aussi la notion d’épacte de la suite (xn), dont nous nous servirons dans le paragraphe
suivant :
Par définition, l’épacte d’une suite périodique à partir d’un certain rang est le plus petit entier
m strictement positif tel que x2m = xm.
Nous pouvons constater qu’elle vaut 4 dans le cas précédent. En effet :
x1  x2
x2  x4
x3  x6
mais x4 = x8.

La poêle dans la main…
Commençons d’abord par observer ce qui se passe dans un cas où la factorisation est connue, avec par
exemple N = 1 133 = 11 × 103.
Nous aurons besoin de deux « poêles à frire », une première pour le nombre N = 1 133 dans /1133,
et une autre pour le facteur p = 11 dans /11, donc deux suites (xn) et (yn). Nous choisirons 2
comme valeur initiale pour chacune de ces deux suites.
Mais nous travaillerons cette fois avec f(x) = x2 + 1, calculé dans la colonne de gauche modulo 1133
(suite (xn)) et dans la colonne de droite modulo 11 (suite (yn)).
Laissons mijoter à feu doux dans une feuille de calcul et regardons ce que l’on obtient…
La poêle de gauche est grande :
un « manche » de longueur 3 (les entiers 2, 5 et 26, en bleu dans le tableau),
une période de longueur 14 (677, 598, 710, 1049, 259, 235, 842, 840, 875, 851, 215, 906, 545,
180 en jaune dans le tableau),
l’épacte vaut 14.
© T³ France 2010 / Photocopie autorisée
142
Mathématiques et TI-Nspire
La poêle de droite est un modèle beaucoup plus petit :
un « manche » de longueur 2 (les entiers 2 et 5),
une période de 2 (4, 6),
une épacte de 2.
Proposition
Pour tout entier naturel n, xn  yn  mod11 .
Démonstration
On peut procéder par récurrence.
C’est bien sûr immédiat pour n = 0 car x0  y0  2 .
Supposons la propriété vraie pour un entier arbitraire n. On peut alors écrire :
xn  yn  mod11 .
Mais alors xn1  mod  xn 2  1,1133 donc xn1  xn 2  1 mod1133 donc comme 1133 est un multiple
de 11, xn1  xn 2  1 mod11 .
D’après l’hypothèse de récurrence, xn1  yn 2  1 mod11 soit xn1  yn1  mod11 . La propriété est
bien prouvée par récurrence.
N’oublions pas non plus que pour un nombre que l’on cherche à factoriser, la colonne de droite n’est
pas accessible... tandis que celle donnant xn, elle, est tout à fait disponible.
Intéressons-nous à ce qui se passe autour de l’épacte e = 2 de la deuxième suite (voir le cadre dans la
feuille de calcul précédente).
Par définition de l’épacte , on sait que l’on a y2e = ye = 4. Par conséquent :
x2e  4  mod11 et xe  4  mod11
d’où l’on déduit x2e  xe  0  mod11 , ce que l’on peut traduire par le fait que p = 11 divise x2e  xe .
On peut le vérifier dans notre exemple car 11 divise bien 598 Ŕ 26 = 572...
L’information est d’importance ! Le facteur p = 11, celui qu’a priori on ne connaît pas, apparaît
discrètement dans la poêle de gauche ! Certes pas directement visible : 11 se contente de diviser
x2e Ŕ xe. Un peu comme s’il était un ingrédient, une pincée de sel, dans la sauce du petit plat que l’on
mijote… Mais comment peut-on isoler ce diviseur, à supposer qu’on ne le connaisse pas, s’il n’est pas
directement visible ? Comme p = 11 divise x2e Ŕ xe et N, il divise aussi le pgcd de x2e Ŕ xe et de N qui à
ce moment est strictement supérieur à 1.
Le discours que l’on tient dans ce cas particulier se généralise à un entier N quelconque et à un de ses
diviseurs p, que l’on cherche à déterminer. Il est prudent, avant de lancer tout calcul, de s’assurer à
l’aide du théorème de Fermat que l’entier que l’entier N est bien composé.
L’étude précédente montre qu’il suffit de travailler avec x2k Ŕ xk, en commençant à k = 1. Comme on
ne sait rien du moment où l’on sera à l’épacte de la deuxième suite, on teste à chaque étape si le pgcd
de x2k Ŕ xk et de N est supérieur à 1 (…l’algorithme d’Euclide est très performant….). Si oui, ce pgcd
lui-même est aussi un diviseur de N et nous avons un facteur de N17 ; sinon on passe à la valeur
suivante de k. L’algorithme s’arrêtera donc forcément au moment de l’épacte de la deuxième suite.
17
Qui peut malheureusement être égal à n lui-même. Dans ce cas, la factorisation n’est pas intéressante…
© T³ France 2010 / Photocopie autorisée
Factorisation des entiers
143
Utilisons cette méthode pour tenter de factoriser l’entier N = 14 453 dans une feuille de calcul.
Le pgcd de x6 Ŕ x3 et de 14 453 vaut alors 97, et celui de x28 Ŕ x14 et de 14 453 est 149 : la factorisation
est complète car 14 453 = 149 × 97.
Quelques remarques avant de passer à l’écriture sur la TI-Nspire de cet algorithme :
sur le choix de la fonction f : pas forcément f  x   x 2  1 comme les exemples que nous
avons vus. N’importe quel autre polynôme peut convenir, à l’exception des polynômes de
degré 1 qui conduisent à des épactes souvent importantes18. Les polynômes de degré deux
réalisent un bon compromis entre une épacte assez petite et des calculs modérés.
le choix du premier terme : de la même façon, on pourrait choisir un autre premier terme
que 2. Il faut cependant éviter 0 ou Ŕ2 qui peuvent conduire à des épactes trop longues.

Écriture d’une fonction
Le plus simple, c’est de définir la fonction f dans l’application Calculs. Il faudra penser à la définir,
ou à la modifier, si nécessaire. On peut aussi mettre comme paramètre d’entrée le nombre n à
factoriser et le premier terme de la suite (même si l’on prend souvent 2). Le code est alors le suivant :
18
Ces polynômes sont à l’inverse parfois utilisés comme générateurs de nombres aléatoires.
© T³ France 2010 / Photocopie autorisée
144
Mathématiques et TI-Nspire
En conservant les notations de notre exemple, on ne gère que l’évolution de la suite (xn) : la suite (yn)
est en effet inaccessible dans la mesure où on ne connaît pas de factorisation de notre entier. À chaque
fois que l’on avance d’une étape pour x1, on avance deux fois plus vite pour x2, d’où la double
instruction pour cette dernière variable.
On sait qu’au moment de l’épacte de la deuxième suite (yn) Ŕ inconnue au demeurant Ŕ, le pgcd de x2
et de x1 est supérieur à 1 : comme on ignore le moment où survient cette épacte, on teste le pgcd à
chaque passage dans la boucle19.
Les résultats sont satisfaisants comme le montre l’écran de calculatrice suivant. Ils sont obtenus en
des temps très courts…

Quelques remarques sur cet algorithme
Cet algorithme renvoie-t-il toujours un diviseur strict de N ? Tout ce que l’on sait, c’est qu’il
renvoie un diviseur de N strictement plus grand que 1… mais il arrive parfois, si l’on n’a pas trop de
chance, que ce pgcd soit égal ... à N lui-même, ce qui ne règle en rien le problème de la factorisation
de N…
Ainsi par exemple, avec N = 1 591 et f(x) = x2 Ŕ 1 :
Mais le problème est réglé avec f(x) = x2 + 1.
19
Heureusement que l’algorithme d’Euclide est très performant…
© T³ France 2010 / Photocopie autorisée
Factorisation des entiers
145
Cela arrive notamment quand N est le produit de deux nombres premiers, ayant chacun la même
épacte. Dans l’exemple considéré, 1 591 est le produit des nombres premiers 37 et 43. Or il se trouve
que chacun de ses deux entiers génère des suites qui ont la même épacte, à savoir 6, comme le montre
la feuille de calcul suivante :
Au moment de l’épacte, on saura que x2e  xe est à la fois divisible par 37 et 43 donc par 1 591 ! C’est
pourquoi le pgcd renvoyé est précisément 1 591.
Il n’y a pas de remède, sauf à changer la fonction utilisée : ici, avec f(x) = x2 + 1, il n’y a plus de
problème.
Cet algorithme demande-t-il beaucoup de temps ? En fait non, car il se trouve que l’épacte de la
deuxième suite apparaît assez rapidement. Des calculs ont été faits sur ordinateur qui prouvent que,
pour tout nombre premier p inférieur à 106, l’épacte de la suite (xn) définie par :

u0  2

2

 xn 1  xn  c où c  1
est inférieure à 3300.
Plus précisément, on conjecture que cette épacte est, pour tout nombre premier p, inférieure ou égale
à 4 p log p : personne ne l’a cependant encore prouvé, ne sachant pas par quel bout prendre le
3
manche de la poêle...
L’algorithme risque par contre de tourner longtemps dans le cas où le nombre N est premier... Il est
facile, et peu coûteux en temps machine, de tester au préalable si le nombre est premier ou composé :
le test de Fermat fait alors l’affaire, à moindre frais. Par exemple si 2N Ŕ 1 n’est pas congru à 1 modulo
N, alors N est composé.
Une des plus belles réussites de cette méthode a été la factorisation en 1980 par Brent et Pollard du
8
gigantesque nombre de Fermat F8 = 22 + 1 = 2256 + 1, un entier de 78 chiffres.
© T³ France 2010 / Photocopie autorisée
146
Mathématiques et TI-Nspire
On savait ce nombre composé depuis quelques années déjà, sans avoir mis en évidence un des ses
10
facteurs. Brent et Pollard ont utilisé la méthode de la poêle à frire avec x0 = 3 et f(x) = x2 + 1. En
deux heures d’ordinateur, ils mirent en évidence le facteur premier suivant de F8 :
1 238 926 361 552 897
On put ensuite montrer que l’autre facteur (de 62 chiffres) était premier... Épactant non ?
De nombreuses méthodes de factorisation, toutes plus ingénieuses les une que les autres Ŕ nous en
avons étudié quelques-unes Ŕ ont vu le jour depuis le développement des ordinateurs. D’ailleurs, on
ne peut qu’être émerveillé devant les performances de la fonction Factor de notre calculatrice, en
sachant la difficulté réelle qu’il y a à factoriser un nombre entier un peu grand.
Le problème de la factorisation, au départ purement théorique, a revêtu depuis quelques années un
intérêt stratégique accru, avec en particulier le développement de la cryptographie sur Internet.
Les méthodes modernes de cryptographie sont basées sur la quasi-impossibilité qu’il y a à factoriser
un nombre entier produit de deux nombres premiers, dès que ceux-ci sont suffisamment grands.
Encore vaut-il mieux bien connaître les performances des principaux algorithmes de factorisations !
La méthode de Fermat par exemple nous montre qu’il serait bien imprudent de choisir les deux
facteurs premiers trop proches !
Au hasard d’Internet, on peut suivre les défis des factorisations du moment, souvent liés d’ailleurs à la
cryptographie RSA. Le dernier record date de mai 2005 avec la factorisation du « gigantesque »
nombre RSA20020 (de 200 chiffres décimaux) :
RSA210, au moment où j’écris (juillet 2010) n’est toujours pas tombé !
20
Source Wikipedia http://fr.wikipedia.org/wiki/RSA-200.
© T³ France 2010 / Photocopie autorisée
Factorisation des entiers
147
ANNEXE : quelques factorisations
C’est souvent la conjonction de plusieurs méthodes qui vient à bout des factorisations délicates. Pour
dégrossir la recherche, il est commode d’écrire une fonction donnant les facteurs premiers « petits »
Ŕ inférieurs à un entier m donné Ŕ d’un entier donné.
C’est l’objet de la fonction suivante :
Il ne faut pas non plus oublier les outils algébriques qui permettent sans efforts des factorisations
intéressantes. Outre les classiques identités remarquables, on peut signaler :
a10  1   a 2  1 a8  a 6  a 4  a 2  1

  a 2  1  a 4  5a3  7a 2  5a  1  10a  a3  2a 2  2a  1
2
La vérification est immédiate avec le calcul formel.
© T³ France 2010 / Photocopie autorisée
2

148
Mathématiques et TI-Nspire
L’intérêt de la deuxième écriture se perçoit lorsque 10a est un carré : la deuxième parenthèse est de
nouveau une différence de deux carrés.
Factorisation de 1090+1
On peut commencer par utiliser la formule précédente avec a = 109 ; on est bien dans le cas où 10a est
un carré ! Trois facteurs apparaissent, qui vont être traités séparément : par commodité, ils ont été
nommés f1(x), f2(x) et f3(x).
Traitons f1(109) avec ptfact : les trois nombres qui apparaissent sont premiers.
Traitons f2(109) avec ptfact : 61 et 3541 sont premiers, reste le troisième facteur, composé.
Ce troisième facteur « tombe » avec la méthode de la poêle à frire.
Enfin f3(109), qui tombe aussi sous la conjonction de ptfact et de poele particulièrement efficace en la
matière !
© T³ France 2010 / Photocopie autorisée
Factorisation des entiers
149
Bref, la factorisation de 1090 + 1 est terminée21. Alors que le factor de TI-Nspire ne donne pas le
résultat, le nombre étant beaucoup trop grand !
21
Voir aussi la factorisation que je propose de 101000 Ŕ 1, en n’utilisant que les outils de logiciel TI-NSpire et le résultat algébrique
précédent à l’adresse http://www.les-mathematiques.net/phorum/read.php?5,538796,539006#msg-539006.
© T³ France 2010 / Photocopie autorisée
Téléchargement