Le théorème de Lamé : Fibonacci, le PGCD, et la naissance de la complexité algorithmique
Tout ce qu'il faut savoir pour en faire un grand oral solide
Sommaire12 sections
Le théorème de Lamé fait partie de ces résultats que je conseille volontiers à mes élèves quand ils cherchent un angle solide pour leur grand oral autour de Fibonacci. Il rassemble dans une même démonstration trois choses qu’on n’a pas l’habitude de voir ensemble : l’algorithme d’Euclide, la suite de Fibonacci, et l’idée même de complexité algorithmique. Le tout dans deux pages et demie publiées en 1844, soit plus d’un siècle avant que la complexité algorithmique ne devienne formellement une discipline.
J’ai écrit cet article pour que tu puisses t’en emparer entièrement. La problématique : combien d’étapes peut prendre l’algorithme d’Euclide dans le pire cas, et pour quelles paires d’entiers ce pire cas est-il atteint ? C’est une vraie question mathématique, et la réponse est un théorème publié par Gabriel Lamé dans une note à l’Académie des Sciences. La démonstration tient en quelques lignes, elle est accessible au lycée, et la conclusion fait apparaître la suite de Fibonacci là où on ne l’attendait pas.
L’algorithme d’Euclide
Si tu n’as jamais vraiment manipulé l’algorithme d’Euclide, voici l’idée. Tu cherches le PGCD (plus grand commun diviseur) de deux entiers et avec . Au lieu de chercher tous les diviseurs des deux nombres et de prendre le plus grand, on s’appuie sur une propriété très simple :
Autrement dit, on remplace le couple par le couple où est le reste de la division euclidienne de par , et le PGCD ne change pas. Comme , les nombres deviennent plus petits à chaque étape, l’algorithme s’arrête forcément, et le dernier diviseur non nul donne le PGCD recherché.
Prenons un exemple concret avec :
Trois divisions, le reste devient nul, on s’arrête. . La mécanique est toujours la même : à chaque étape, une division euclidienne, et le couple devient strictement plus petit.
Pour t’approprier l’algorithme avec tes propres entiers, le composant ci-dessous te permet de saisir n’importe quelle paire et de voir la trace complète des divisions, étape par étape :
Tu peux jouer avec : essaie par exemple , , et puis compare avec . Le premier prend trois étapes, le second en prend neuf. Ce qui surprend, c’est que la paire la plus lente n’est pas la plus grande : et sont tous les deux plus petits que , et pourtant l’algorithme rame trois fois plus longtemps. Le nombre d’étapes ne dépend pas seulement de la taille des entrées, mais aussi de leur structure. C’est cette observation qui conduit Lamé à sa question.
La question de la rapidité
L’algorithme d’Euclide est rapide. Pour des entiers de taille raisonnable, on parle de quelques étapes, pas de dizaines. Mais à quel point exactement ? Existe-t-il une borne précise sur le nombre d’étapes en fonction de la taille des entrées ?
Si tu regardes la trace d’un algorithme d’Euclide générique, tu remarques que le second entier décroît rapidement à chaque étape. On peut même montrer que le second entier est divisé par au moins toutes les deux étapes, ce qui ressemble à une décroissance géométrique. Cela suggère que le nombre d’étapes croît comme le logarithme de l’entrée : pour des entrées de plus en plus grandes, le nombre d’étapes augmente, mais beaucoup plus lentement que l’entrée elle-même.
Cette intuition logarithmique ne suffit pas pour faire de la mathématique propre. Il faut une borne précise, démontrée rigoureusement, et il faut savoir quelle paire atteint le pire cas pour une taille donnée. C’est exactement la question que Gabriel Lamé se pose en 1844.
1844 : Gabriel Lamé entre en scène
Gabriel Lamé est l’un de ces mathématiciens français du dix-neuvième siècle qu’on connaît surtout par les morceaux de mathématiques qui portent son nom : la fonction de Lamé, les coefficients de Lamé en élasticité, et bien sûr le théorème dont on parle ici. Né en 1795 à Tours, il sort de l’École polytechnique en 1817, fait l’École des Mines, puis passe une douzaine d’années à enseigner à l’Institut des voies de communication de Saint-Pétersbourg avec son collègue Émile Clapeyron, avant de revenir à Paris en 1832 où il succède à César Despretz sur la chaire de physique de Polytechnique. Ses travaux couvrent l’élasticité, la théorie de la chaleur, la théorie des nombres, et il sera élu à l’Académie des sciences en 1843. La chaire de physique mathématique de la Sorbonne, il l’obtiendra plus tard, en 1851.
C’est dans ce dernier domaine qu’il publie en 1844 sa célèbre note. Il s’agit d’une simple communication aux Comptes Rendus de l’Académie des Sciences, deux pages et demie de raisonnement par récurrence, qui va passer étonnamment inaperçue pendant un siècle avant d’être reconnue comme le tout premier théorème de complexité algorithmique.
Pour situer le moment historique : 1844, c’est l’année où Samuel Morse envoie son premier télégramme entre Washington et Baltimore. La théorie des algorithmes telle qu’on la connaît aujourd’hui n’existe pas. Le mot “algorithme” est encore réservé, dans le vocabulaire académique, à l’algorithme d’Euclide lui-même et à quelques procédés arithmétiques élémentaires. Personne ne parle de “complexité” ni de “borne supérieure du nombre d’opérations”. Lamé démontre pourtant un résultat qui aujourd’hui se classerait directement dans la théorie de la complexité moderne.
Le théorème de Lamé
Voici l’énoncé que Lamé démontre, formulé dans le langage moderne.
Théorème (Lamé, 1844). Soient deux entiers. Si l’algorithme d’Euclide appliqué au couple termine en exactement étapes, alors , où désigne le -ième nombre de Fibonacci.
L’énoncé est simple en apparence, mais il dit quelque chose de très fort. Il borne le nombre d’étapes par une fonction du second entier uniquement, et cette fonction est l’inverse de Fibonacci. Comme la suite de Fibonacci croît géométriquement avec ratio , l’inégalité se réécrit, en passant au logarithme :
Le nombre d’étapes est donc au pire proportionnel au nombre de chiffres de . Pour un entier de cent chiffres, l’algorithme d’Euclide termine en moins de cinq cents étapes, et pour un entier de mille chiffres, en moins de cinq mille. Cette borne logarithmique, c’est exactement ce qu’on cherche en complexité algorithmique : un coût qui croît raisonnablement même quand l’entrée explose.
Le plus remarquable dans le théorème, c’est la précision de cette borne. Lamé ne dit pas seulement “il existe une constante telle que…” : il dit exactement quels sont les pires cas, et pour quelles valeurs de ils sont atteints. Les pires cas sont les paires de Fibonacci consécutifs. La borne est donc atteinte par une famille explicite d’entrées, ce qui en fait un résultat à la fois théorique et constructif.
La démonstration par récurrence
La démonstration tient en quelques lignes par récurrence sur le nombre d’étapes . Voici deux manières de la présenter, qui aboutissent au même résultat mais regardent l’algorithme dans des sens opposés. La première lit le couple comme un objet qu’on déforme à chaque division. La seconde suit la suite des restes successifs et raisonne directement sur leur trace.
Démonstration par invariant double
Le truc de cette première démonstration, c’est qu’il faut démontrer un peu plus que l’énoncé brut : on prouve par récurrence un invariant double, qui se propage de manière propre.
Démontrer le couple d’inégalités est plus solide que la seule inégalité sur , et c’est précisément ce double énoncé qui permet à la récurrence de fonctionner.
Initialisation (). Si l’algorithme termine en une seule étape, alors la première division donne . La condition force , sinon on aurait et donc , ce qui contredit l’hypothèse. Donc , et . L’invariant double est vrai au rang .
Hérédité. Suppose l’invariant vrai pour tout couple qui termine en étapes. Considère un couple qui termine en étapes. La première division donne avec (sinon l’algorithme se serait arrêté en une seule étape) et . Le couple subit alors les étapes restantes, et par hypothèse de récurrence appliquée à ce couple, on a à la fois et . Comme , on en déduit , en utilisant la définition même de la suite de Fibonacci. L’invariant est démontré au rang .
C’est la démonstration la plus compacte des deux. Tu peux la décrire à l’oral en deux ou trois minutes, et c’est probablement celle que tu utiliseras pour ton grand oral.
Démonstration par les restes successifs
L’autre angle consiste à raisonner directement sur la suite des restes produite par l’algorithme. C’est une lecture plus algorithmique, qui colle de près à ce qu’un programme calcule étape par étape.
Notons , , et plus généralement pour . La suite est strictement décroissante, et l’algorithme termine lorsqu’un reste devient nul. Si l’algorithme prend étapes, alors et .
L’objectif est de démontrer par récurrence descendante, de l’indice vers , l’inégalité
Quand on appliquera cette inégalité à et , on retrouvera exactement l’énoncé du théorème : et .
Initialisation. Pour , le reste est le PGCD de et , donc . Pour , la dernière division s’écrit puisque . La décroissance stricte impose , donc . L’inégalité est donc vraie aux deux premiers rangs de la récurrence.
Hérédité. Suppose démontré et . La division avec donne
C’est exactement l’inégalité voulue à l’indice .
À la fin de la récurrence, pour , on obtient . Et pour , on obtient . C’est l’énoncé du théorème.
L’avantage pédagogique de cette présentation, c’est qu’elle correspond à ce que tu vois quand tu déroules l’algorithme à la main. Chaque reste successif est obligé de “dépasser” un Fibonacci de plus en plus grand à mesure qu’on remonte la trace. Pour la paire pgcd(89, 55), tu peux vérifier : les restes sont , et c’est exactement la suite de Fibonacci à l’envers. La borne du théorème est saturée, parce que chaque inégalité de la récurrence est ici une égalité.
L’argument, dans les deux versions, est court, élégant, et entièrement à portée d’un élève de Terminale. Tu peux le décrire à l’oral pendant ta présentation, ou le détailler sur ton brouillon de préparation pour t’en servir comme appui.
Pourquoi Fibonacci ? L’intuition géométrique
À ce stade, tu sais que Fibonacci est le pire cas et tu sais le démontrer. Reste une question d’un autre ordre, plus profonde : pourquoi intuitivement Fibonacci, et pas une autre suite ? Pourquoi sont-ce précisément ces nombres qui ralentissent l’algorithme au maximum ?
L’intuition est géométrique. Elle vient de la version originelle de l’algorithme d’Euclide, ce qu’on appelle l’anthyphérèse chez les Grecs, c’est-à-dire la “soustraction réciproque”. L’algorithme d’Euclide se voit alors comme une opération géométrique sur des rectangles, et c’est cette interprétation qui révèle pourquoi Fibonacci occupe une place si particulière.
Place un rectangle de dimensions avec . Découpe le plus grand carré possible à l’intérieur, soit un carré . Il reste un rectangle de dimensions où . Recommence avec ce rectangle restant : tu découpes le plus grand carré possible et tu itères, jusqu’à ce que le rectangle restant soit lui-même un carré. Le côté de ce dernier carré, c’est exactement le PGCD de et .
Cette construction est le pendant géométrique exact de l’algorithme d’Euclide. Chaque carré découpé correspond à une division euclidienne avec quotient , et quand le quotient vaut , on découpe carrés du même côté en une seule étape. La question intéressante devient alors la suivante : pour quelle paire obtient-on le plus grand nombre d’étapes différentes ? La réponse tient en une phrase : c’est la paire qui ne consomme qu’un seul carré à chaque étape, autrement dit celle dont tous les quotients de la division euclidienne valent .
Or si tous les quotients valent , l’algorithme d’Euclide s’écrit , , , et ainsi de suite. À chaque étape, le terme courant est la somme des deux termes suivants, ce qui se réécrit, en remontant la suite, comme la récurrence de Fibonacci. La paire qui maximise le nombre d’étapes est donc précisément celle où les côtés successifs des rectangles forment la suite de Fibonacci à l’envers. Pour deux Fibonacci consécutifs et , l’algorithme effectue étapes différentes avant de terminer. Pour toute autre paire, on ne fait pas mieux : il y aura forcément au moins une division avec quotient , qui consomme plusieurs carrés en une seule étape.
C’est précisément ce que tu vois dans le composant ci-dessous, qui te permet de tester la construction géométrique pour différentes paires d’entiers et de comparer visuellement le nombre d’étapes :
- Rectangle
- 89 × 55
- Étapes Euclide
- 9
- Carrés total
- 10
- PGCD
- 1
Paire de Fibonacci consécutifs : tous les quotients valent 1, sauf le dernier. La spirale qui apparaît est la signature du pire cas de l'algorithme.
Joue avec les presets. Pour la paire , la disposition des carrés découpés forme la spirale de Fibonacci classique, celle qu’on retrouve dans tous les manuels et qu’on associe au nombre d’or. Cette spirale n’est pas une décoration : c’est exactement le pire cas géométrique de l’algorithme d’Euclide. La paire , au contraire, ne donne que sept étapes différentes malgré des entiers plus grands, parce que l’algorithme tombe sur des quotients supérieurs à qui accélèrent la convergence. La spirale de Fibonacci, qu’on présente d’habitude comme une curiosité contemplative, est aussi la signature géométrique du résultat de Lamé.
L’héritage : Lamé et la complexité moderne
Le théorème de Lamé est isolé dans son siècle. Il faut attendre les années 1960 pour qu’on prenne conscience qu’il s’agit du premier résultat de complexité algorithmique formellement démontré. Pendant plus d’un siècle, il reste un résultat connu mais peu cité, classé en théorie élémentaire des nombres plutôt qu’en algorithmique. C’est Donald Knuth qui le réhabilite explicitement dans le second volume de The Art of Computer Programming, et qui dit en substance : Lamé a fait, en 1844, ce que nous croyons avoir inventé.
graph LR A["Gabriel Lamé 1844"] --> B["Donald Knuth 1962"] B --> C["Cobham, Edmonds 1965"] C --> D["Stephen Cook 1971"]
Knuth fait le pont entre les mathématiques anciennes et l’informatique moderne. Cobham et Edmonds posent la même année les fondations de la théorie de la complexité, en définissant les classes de problèmes en temps polynomial. Cook, en 1971, introduit la notion de NP-complétude et complète l’édifice. C’est précisément à ce moment-là, plus de cent ans après Lamé, que la complexité algorithmique devient une discipline mature, et qu’on peut enfin replacer le théorème de Lamé dans son contexte théorique.
Ce double caractère, précurseur méconnu et résultat qui se classe directement dans la théorie moderne, distingue le théorème de Lamé. Il fait aussi de cet angle un sujet de grand oral particulièrement riche : tu peux y articuler à la fois de l’histoire des sciences, de la théorie des nombres, et de la culture algorithmique moderne.
De Lamé à RSA : un lien direct avec la cryptographie
L’algorithme d’Euclide ne sert pas seulement à calculer des PGCD pour le plaisir. Il est au cœur de l’arithmétique moderne, et il est utilisé tous les jours, des milliards de fois par seconde, dans les protocoles qui sécurisent Internet.
L’algorithme d’Euclide étendu, variante du précédent, permet de calculer non seulement le PGCD de et , mais aussi des coefficients et tels que . C’est l’identité de Bézout, et elle a une conséquence directe : quand , l’algorithme te donne immédiatement l’inverse modulaire de modulo , c’est-à-dire l’entier tel que .
Or l’inverse modulaire est précisément ce dont RSA a besoin pour générer ses clés. Quand on génère une clé RSA, on choisit deux grands nombres premiers et , on calcule , et on choisit un exposant premier avec . La clé privée est alors l’inverse modulaire de modulo , calculé par l’algorithme d’Euclide étendu. Sans Euclide, pas de RSA. Et sans la borne logarithmique de Lamé, pas de garantie que ce calcul soit faisable en temps raisonnable, même pour des entiers de mille bits comme on en utilise en pratique.
graph TD A["Algorithme d'Euclide (Euclide, ~300 av. JC)"] A --> B["Théorème de Lamé (1844) Borne en O(log b)"] A --> C["Algorithme d'Euclide étendu Identité de Bézout"] B --> D["Garantie de complexité Euclide en temps polynomial"] C --> E["Inverse modulaire au ≡ 1 (mod n)"] D --> F["RSA Génération de clés faisable"] E --> F F --> G["Sécurité TLS, paiements, signatures numériques"] style A fill:#f5ead8,stroke:#8E6F3E,color:#1A1A1A style B fill:#e8f5e8,stroke:#27AE60,color:#1A1A1A style F fill:#f8e8e8,stroke:#C0392B,color:#1A1A1A style G fill:#f8e8e8,stroke:#C0392B,color:#1A1A1A
Quand tu mentionnes ce lien dans ton oral, tu rattaches Fibonacci à un sujet d’actualité (la cybersécurité) et tu ouvres vers d’autres angles que le jury connaît bien. Si tu veux creuser RSA en détail, l’article RSA et l’arithmétique qui protège Internet du blog explore ce sujet à fond.
Ton plan Grand oral, minute par minute
L’épreuve du Grand oral se déroule en deux temps de 10 minutes : un exposé en monologue, puis un échange avec le jury. Voici un plan détaillé pour la phase d’exposé. Ne dépasse pas les temps indiqués : un jury habitué pénalise les candidats qui s’éternisent sur l’introduction.
Compare le calcul de pgcd(89, 100) en trois étapes avec celui de pgcd(89, 55) en neuf étapes. Pose la question : pourquoi des entiers plus petits ralentissent-ils plus l'algorithme ?
Rappelle brièvement la mécanique de l'algorithme et le lemme central pgcd(a, b) = pgcd(b, a mod b). Quatre-vingt-dix secondes maximum, c'est juste pour fixer le contexte technique.
Énonce le théorème de Lamé : si l'algorithme prend k étapes, le second entier est minoré par le (k+1)-ième nombre de Fibonacci. Esquisse la démonstration par récurrence avec invariant double sur le couple. Le passage clé tient en une ligne : a ≥ b + r, et la somme de deux Fibonacci consécutifs donne le suivant.
Décris à l'oral le découpage du rectangle a × b en carrés successifs. Explique que la paire qui découpe le plus de carrés différents est celle où tous les quotients valent 1, ce qui force la récurrence de Fibonacci. C'est l'image qui marque le jury.
Lamé en 1844 démontre, sans le savoir, le premier théorème de complexité algorithmique. Knuth le redécouvre dans les années soixante. L'algorithme d'Euclide étendu est au cœur de RSA, et la borne logarithmique garantit que la génération de clés est faisable en pratique.
Ce qui te frappe dans ce résultat : qu'un théorème de 1844 anticipe une discipline qui naîtra plus d'un siècle plus tard. Lien éventuel avec ton parcours, ta spécialité NSI, ta curiosité pour l'histoire des sciences.
Ta checklist avant l’oral
Avant ton passage, vérifie que...
- Tu sais énoncer l'algorithme d'Euclide et démontrer le lemme pgcd(a, b) = pgcd(b, a mod b)
- Tu sais énoncer précisément le théorème de Lamé : si l'algorithme prend k étapes, le second entier est minoré par le (k+1)-ième Fibonacci
- Tu sais dérouler la démonstration par récurrence avec invariant double, sans tes notes
- Tu peux décrire à l'oral l'intuition géométrique du découpage en carrés successifs
- Tu sais expliquer pourquoi la paire (89, 55) prend exactement 9 étapes en utilisant les Fibonacci consécutifs
- Tu connais la chronologie : Lamé 1844, Knuth 1962, Cobham et Edmonds 1965, Cook 1971
- Tu sais expliquer le lien avec RSA via l'algorithme d'Euclide étendu et l'inverse modulaire
- Tu peux répondre à au moins trois questions imprévues sur la complexité, la rigueur, ou la portée historique
- Tu sais ce que tu admets (la formule logarithmique précise, les détails de RSA) et tu l'assumes
Pour conclure
Le théorème de Lamé n’est pas un sujet de grand oral facile. C’est un sujet qui tient la route mathématiquement, avec une vraie démonstration, un vrai théorème, et un vrai pont vers l’histoire des sciences et l’algorithmique moderne.
Si tu maîtrises la démonstration par récurrence avec son invariant double, que tu sais raconter l’intuition géométrique avec la spirale de Fibonacci, et que tu fais le lien avec la cryptographie moderne en restant honnête sur ce que tu admets, tu as un grand oral solide. Pas brillant par sa forme, mais solide par son fond. C’est exactement ce qu’un jury attend.
Sources
- Lamé, G. (1844). Note sur la limite du nombre des divisions dans la recherche du plus grand commun diviseur entre deux nombres entiers. Comptes Rendus de l’Académie des Sciences, tome 19, séance du 13 mai 1844, pp. 867-870.
- Knuth, D. E. (1969, 1973, 1981, 1997). The Art of Computer Programming, Volume 2: Seminumerical Algorithms, section 4.5.3 “Analysis of Euclid’s Algorithm”. Addison-Wesley.
- Shallit, J. (1994). Origins of the analysis of the Euclidean algorithm. Historia Mathematica, 21(4), pp. 401-419.
- Cobham, A. (1965). The intrinsic computational difficulty of functions. Proceedings of the 1964 International Congress for Logic, Methodology, and Philosophy of Science, pp. 24-30.
- Edmonds, J. (1965). Paths, trees and flowers. Canadian Journal of Mathematics, 17, pp. 449-467.
- Wikipedia : Algorithme d’Euclide, Théorème de Lamé, Gabriel Lamé.