Grand oral 10 septembre 2026 20 min de lecture

Le théorème de Zeckendorf : gagner à coup sûr au jeu de Fibonacci

Un jeu de jetons, une écriture unique des entiers, et un code qui sait où il s'arrête

Sommaire10 sections

On commence par un jeu. Sur la table, il y a un tas de vingt jetons. Tu joues en premier et tu prends autant de jetons que tu veux, à une seule condition : tu n’as pas le droit de prendre tout le tas. Ensuite, chacun son tour, on prend au moins un jeton et au plus le double de ce que l’autre vient de prendre. Celui qui ramasse le dernier jeton a gagné.

Les règles sont courtes, mais ne crois pas que tu vas gagner facilement. Avant de lire la suite, joue quelques parties contre l’ordinateur ci-dessous. Change la taille du tas, laisse-le commencer de temps en temps, et regarde ce qui se passe.

    Au premier coup, on prend ce qu'on veut sauf tout le tas. Ensuite, chacun prend au moins un jeton et au plus le double de ce que l'autre vient de prendre. Celui qui ramasse le dernier jeton gagne.

    Si tu as joué honnêtement, sans chercher de stratégie dans un livre, tu as dû perdre la plupart de tes parties. L’ordinateur ne triche pas et il ne calcule pas toutes les suites de coups possibles : il applique une règle très courte, tirée d’un théorème qu’un élève de Terminale peut démontrer entièrement. C’est ce théorème qu’on va aller chercher, et on reviendra au jeu à la fin, quand tu sauras le battre.

    Qui gagne avec 2, 3, 4 ou 5 jetons ?

    Le réflexe à avoir face à un jeu comme celui-là, c’est de regarder les tout petits tas, là où on peut tout calculer à la main. On dit qu’une position est gagnante quand le joueur qui doit jouer peut gagner à coup sûr, quoi que fasse l’autre, et perdante dans le cas contraire.

    Avec 2 jetons, tu n’as pas le droit de tout prendre, donc tu prends 1 jeton, et ton adversaire prend le dernier. Tu as perdu, et tu n’avais aucun autre choix : 2 est une position perdante pour celui qui commence.

    Avec 3 jetons, tu peux en prendre 1 ou 2. Si tu en prends 1, il en reste 2 et ton adversaire a droit à 2 jetons, il prend tout. Si tu en prends 2, il en reste 1 et il le prend. Dans les deux cas tu perds, donc 3 est aussi perdante.

    Avec 4 jetons, les choses changent. Tu prends 1 jeton, il en reste 3, et ton adversaire n’a droit qu’à 1 ou 2 jetons. S’il en prend 2, il en reste 1 et tu le prends. S’il en prend 1, il en reste 2, tu as droit à 2 jetons et tu prends tout. Tu gagnes à tous les coups, donc 4 est gagnante.

    En continuant de cette façon, avec un peu de patience et une feuille de brouillon, tu obtiens ce tableau pour les tas de 2 à 13 jetons :

    Celui qui commence perdCelui qui commence gagne
    2, 3, 5, 8, 134, 6, 7, 9, 10, 11, 12

    Regarde la colonne de gauche : 2, 3, 5, 8, 13. Tu la reconnais ? Ce sont des nombres de Fibonacci, chacun étant la somme des deux précédents. Le suivant serait 21, puis 34, et c’est bien ce qu’on observe si on pousse le tableau plus loin.

    Je te conseille vraiment de refaire ce tableau toi-même jusqu’à 8 au moins, parce qu’il change la façon dont tu vas présenter le sujet. Tu ne pars plus de la suite de Fibonacci pour aller chercher une application, tu tombes dessus en analysant un jeu, ce qui est beaucoup plus convaincant devant un jury.

    Reste à comprendre pourquoi ce sont ces nombres-là, et surtout ce qu’il faut jouer quand le tas n’est pas un nombre de Fibonacci. Pour ça, il faut faire un détour par une autre question : comment écrire un entier avec des nombres de Fibonacci.

    Écrire un entier avec des nombres de Fibonacci

    Commençons par poser les choses proprement. La suite de Fibonacci (Fn)n≥1(F_n)_{n \geq 1} est définie par ses deux premiers termes et par une relation de récurrence :

    {F1=1, F2=1∀n∈N∗, Fn+2=Fn+1+Fn\displaystyle \begin{cases} F_1 = 1,\ F_2 = 1 \\ \forall n \in \mathbb{N}^*,\ F_{n+2} = F_{n+1} + F_n \end{cases}

    Chaque terme est la somme des deux précédents, ce qui donne les valeurs suivantes :

    kk23456
    FkF_k12358
    kk7891011
    FkF_k1321345589

    Dans tout l’article, je n’utilise les termes qu’à partir de F2F_2. Le nombre 11 apparaît deux fois au début de la suite, sous le nom F1F_1 et sous le nom F2F_2. Si on gardait les deux, le même nombre pourrait s’écrire de deux façons :

    4=F4+F1=F4+F2\displaystyle 4 = F_4 + F_1 = F_4 + F_2

    Ça casserait tout ce qui suit. Garde cette remarque en tête, c’est une question que le jury peut très bien te poser.

    L’écriture de Zeckendorf

    Voici l’objet central de l’article. Soit n≥1n \geq 1 un entier. On appelle écriture de Zeckendorf de nn toute écriture de la forme

    n=Fk1+Fk2+⋯+Fkr\displaystyle n = F_{k_1} + F_{k_2} + \dots + F_{k_r}

    où r≥1r \geq 1 est le nombre de termes, et où les indices vérifient deux conditions :

    k1>k2>⋯>kr≥2et∀i∈{1,…,r−1}, ki−ki+1≥2\displaystyle k_1 > k_2 > \dots > k_r \geq 2 \qquad \text{et} \qquad \forall i \in \{1, \dots, r-1\},\ k_i - k_{i+1} \geq 2

    La première condition dit que les termes sont distincts et qu’on n’utilise jamais F1F_1. La seconde dit qu’on ne prend jamais deux termes voisins dans la suite : si F6F_6 est dans la somme, ni F5F_5 ni F7F_7 ne peuvent y être.

    Par exemple, 20=F7+F5+F320 = F_7 + F_5 + F_3 est une écriture de Zeckendorf, puisque les indices 77, 55 et 33 sont espacés de 22. En revanche, 8=F5+F48 = F_5 + F_4 n’en est pas une, parce que les indices 55 et 44 sont voisins. Pour 88, l’écriture de Zeckendorf est tout simplement 8=F68 = F_6.

    On peut aussi noter une écriture de Zeckendorf avec des 00 et des 11, comme en binaire. On aligne les termes de la suite du plus grand au plus petit, jusqu’à F2F_2, et on met un 11 sous chaque terme utilisé, un 00 sous les autres. Pour 2020, on lit de F7F_7 à F2F_2 :

    20=F7+F5+F3⟼101010\displaystyle 20 = F_7 + F_5 + F_3 \quad \longmapsto \quad 101010

    Avec cette notation, la seconde condition devient très visuelle : deux 11 ne sont jamais côte à côte.

    Le théorème de Zeckendorf affirme que cette écriture existe toujours, et qu’il n’y en a qu’une.

    Théorème de Zeckendorf. Tout entier n≥1n \geq 1 possède une et une seule écriture de Zeckendorf.

    Comment la trouver : l’algorithme glouton

    Pour trouver l’écriture de Zeckendorf d’un entier, la méthode la plus naturelle consiste à prendre à chaque étape le plus grand terme de la suite qui tient dans ce qui reste. Avec 2020, le plus grand terme inférieur ou égal à 2020 est 1313, il reste 77 ; le plus grand qui tient dans 77 est 55, il reste 22, qui est lui-même un terme de la suite :

    20=13+7,7=5+2,donc20=13+5+2\displaystyle 20 = 13 + 7, \qquad 7 = 5 + 2, \qquad \text{donc} \qquad 20 = 13 + 5 + 2

    Cette méthode s’appelle un algorithme glouton : à chaque étape, on fait le choix qui paraît le meilleur sur le moment, sans jamais revenir en arrière. Avec 100100, on obtient de la même façon l’exemple que j’avais pris dans l’article qui présente toute la série :

    100=89+8+3=F11+F6+F4\displaystyle 100 = 89 + 8 + 3 = F_{11} + F_6 + F_4

    Essaie avec d’autres entiers dans le convertisseur ci-dessous. Il déroule l’algorithme étape par étape, coche les termes utilisés et affiche l’écriture en 00 et 11. Tu vas voir que deux cases cochées ne sont jamais voisines.

    Tester :
      À chaque étape, on prend le plus grand nombre de Fibonacci qui tient dans ce qui reste. Les cases cochées ne sont jamais voisines.

      La raison est courte. Soit n≥1n \geq 1 un entier, et soit FkF_k, avec k≥2k \geq 2, le terme que l’algorithme choisit à la première étape. C’est le plus grand terme inférieur ou égal à nn, donc le suivant dépasse nn :

      Fk≤n<Fk+1\displaystyle F_k \leq n < F_{k+1}

      Le reste n−Fkn - F_k vérifie alors :

      0≤n−Fk<Fk+1−Fk=Fk−1\displaystyle 0 \leq n - F_k < F_{k+1} - F_k = F_{k-1}

      Le reste est strictement plus petit que Fk−1F_{k-1}, donc l’algorithme ne pourra pas choisir Fk−1F_{k-1} à l’étape suivante : il prendra au mieux Fk−2F_{k-2}. Il saute toujours au moins une case.

      Cette règle, jamais deux termes voisins, c’est le cœur du sujet. Sans elle, on perd l’unicité, puisque 88 peut s’écrire 88, 5+35 + 3 ou 5+2+15 + 2 + 1.

      L’existence est donc réglée : l’algorithme glouton fournit une écriture de Zeckendorf, et il s’arrête forcément puisque le reste diminue strictement à chaque étape. Si tu veux la rédiger proprement, c’est une récurrence sur nn où l’hypothèse porte sur tous les entiers plus petits que nn, puisque le reste n−Fkn - F_k peut être n’importe lequel d’entre eux. On appelle ça une récurrence forte. Le nom n’est pas au programme, mais l’idée se comprend en une phrase. L’unicité, en revanche, demande un vrai argument.

      Pourquoi il n’existe qu’une seule écriture

      Tout repose sur un lemme qui dit, en gros, qu’une somme de termes non voisins ne peut pas aller très loin au-delà de son plus grand terme.

      Lemme. Soit j≥2j \geq 2 un entier, et soit SS une somme de termes de la suite, d’indices au moins égaux à 22, distincts et sans deux voisins, dont le plus grand terme est FjF_j. Alors :

      S≤Fj+1−1\displaystyle S \leq F_{j+1} - 1

      Avant de le démontrer, regarde à quoi il ressemble sur un exemple. La somme la plus grande possible s’obtient en prenant un terme sur deux, en descendant le plus bas possible. Avec j=6j = 6 :

      F6+F4+F2=8+3+1=12=F7−1\displaystyle F_6 + F_4 + F_2 = 8 + 3 + 1 = 12 = F_7 - 1

      On touche la borne sans jamais la dépasser.

      F₇ = 13sommeF₆ = 8F₄ = 3F₂il manque 1
      En prenant un terme sur deux sous F6F_6, on obtient 8+3+1=128 + 3 + 1 = 12 : il manque toujours exactement une unité pour atteindre le terme suivant de la suite.

      Démonstration. On raisonne par récurrence forte sur jj. Pour tout entier j≥2j \geq 2, on note P(j)\mathcal{P}(j) la propriété : « le lemme est vrai pour toutes les sommes dont le plus grand terme est FjF_j ».

      Initialisation. Pour j=2j = 2, la seule somme possible est S=F2=1S = F_2 = 1, et F3−1=1F_3 - 1 = 1. Pour j=3j = 3, la seule somme possible est S=F3=2S = F_3 = 2, puisqu’on ne peut pas lui ajouter son voisin F2F_2, et F4−1=2F_4 - 1 = 2. Donc P(2)\mathcal{P}(2) et P(3)\mathcal{P}(3) sont vraies.

      Hérédité. Soit j≥4j \geq 4 un entier tel que P(i)\mathcal{P}(i) soit vraie pour tout entier ii compris entre 22 et j−1j - 1. Prends une somme SS dont le plus grand terme est FjF_j. Si S=FjS = F_j, c’est réglé, puisque Fj≤Fj+1−1F_j \leq F_{j+1} - 1. Sinon, on écrit S=Fj+S′S = F_j + S', où S′S' est une somme du même type dont le plus grand terme est un certain FiF_i. Comme Fj−1F_{j-1} est interdit, on a 2≤i≤j−22 \leq i \leq j - 2, et l’hypothèse de récurrence appliquée à S′S' donne :

      S′≤Fi+1−1≤Fj−1−1\displaystyle S' \leq F_{i+1} - 1 \leq F_{j-1} - 1

      On en déduit :

      S=Fj+S′≤Fj+Fj−1−1=Fj+1−1\displaystyle S = F_j + S' \leq F_j + F_{j-1} - 1 = F_{j+1} - 1

      La dernière égalité, c’est simplement la relation de récurrence de la suite. Donc P(j)\mathcal{P}(j) est vraie, et le lemme est démontré pour tout entier j≥2j \geq 2.

      L’unicité en découle presque immédiatement. Soit n≥1n \geq 1 un entier, et suppose qu’il possède deux écritures de Zeckendorf différentes. On commence par retirer des deux côtés les termes qu’elles ont en commun : il reste deux sommes SS et TT, toujours égales, toujours sans termes voisins, mais qui n’ont plus aucun terme en commun. Elles ne sont pas vides toutes les deux, puisque les écritures de départ étaient différentes. Et si l’une était vide, l’autre vaudrait 00 tout en contenant au moins un terme positif, ce qui est impossible.

      On note FaF_a le plus grand terme de SS et FbF_b celui de TT. Comme SS et TT n’ont aucun terme commun, a≠ba \neq b, et quitte à échanger les rôles de SS et TT, on peut supposer a<ba < b. Le lemme appliqué à SS donne alors :

      S≤Fa+1−1<Fa+1≤Fb≤T\displaystyle S \leq F_{a+1} - 1 < F_{a+1} \leq F_b \leq T

      Donc S<TS < T, ce qui contredit S=TS = T. L’écriture de Zeckendorf de nn est bien unique.

      J’aime beaucoup cette preuve pour un oral, parce que chaque étape s’écrit au tableau en une ligne et que l’idée centrale se dit avec des mots : les petits termes, même tous réunis, ne peuvent jamais rattraper un grand. Si le jury te demande de refaire la démonstration pendant l’échange, c’est cette phrase qui doit te revenir en premier.

      Retour au jeu : la stratégie de l’ordinateur

      Retour aux jetons. La stratégie de l’ordinateur est simple : il calcule l’écriture de Zeckendorf du tas et il retire le plus petit terme, à condition que la règle du double le lui permette.

      Reprends le tas de vingt jetons. Son écriture de Zeckendorf est 20=13+5+220 = 13 + 5 + 2, donc le bon premier coup consiste à prendre 22 jetons. Il en reste 18=13+518 = 13 + 5, et ton adversaire a droit à au plus 44 jetons. Voici une partie complète jouée de cette façon :

      TasÉcriture de ZeckendorfCoupLimite pour l’autre
      2013 + 5 + 2toi : 24
      1813 + 5lui : 36
      1513 + 2toi : 24
      1313lui : 48
      98 + 1toi : 12
      88lui : 24
      65 + 1toi : 12
      55lui : 24
      33toi : 3gagné

      À chaque fois que c’est à toi de jouer, tu retires le terme en gras, et ton adversaire se retrouve devant un tas dont le plus petit terme dépasse ce qu’il a le droit de prendre : il est coincé. C’est déjà le cas à 18, où il lui faudrait retirer 5 avec une limite de 4. Avec 13, 8 ou 5, c’est le cas extrême, puisque le tas n’a qu’un seul terme.

      Et ton adversaire, pourquoi il ne peut pas faire pareil ? Suppose que l’écriture de Zeckendorf du tas contienne au moins deux termes, et note FkF_k le plus petit, avec k≥2k \geq 2. Tu retires FkF_k jetons. Le plus petit terme qui reste est alors un certain FjF_j, avec j≥k+2j \geq k + 2 puisque deux termes ne sont jamais voisins. Ton adversaire, lui, a droit à au plus 2Fk2F_k jetons. Or :

      Fj≥Fk+2=Fk+1+Fk>Fk+Fk=2Fk\displaystyle F_j \geq F_{k+2} = F_{k+1} + F_k > F_k + F_k = 2F_k

      L’inégalité stricte vient de ce que Fk+1>FkF_{k+1} > F_k pour tout entier k≥2k \geq 2. Ton adversaire ne peut donc jamais retirer en un seul coup le plus petit terme qui reste, et il ne peut pas copier ta stratégie. Il ne peut pas non plus prendre le dernier jeton tout de suite, puisque le tas restant vaut au moins FjF_j, qui dépasse 2Fk2F_k.

      Attention, cette inégalité ne prouve pas tout. Elle explique pourquoi l’adversaire ne peut pas répliquer avec la même arme. La preuve complète demande en plus de vérifier que, si ton adversaire prend xx jetons, avec xx entier compris entre 11 et 2Fk2F_k, le nouveau tas a un plus petit terme inférieur ou égal à 2x2x, que tu as donc le droit de retirer. Ce point-là est nettement plus technique. Devant le jury, tu peux l’admettre en le disant clairement, ce qui vaut beaucoup mieux qu’une preuve bâclée. Le résultat complet est connu depuis l’article de Michael Whinihan paru en 1963 : le premier joueur gagne si et seulement si le tas de départ n’est pas un terme de la suite de Fibonacci.

      Remonte au jeu en haut de l’article, coche « Montrer la décomposition du tas » et regarde ce que fait l’ordinateur. Tu vas voir qu’il retire systématiquement le terme en vert, sauf s’il peut tout prendre d’un coup ou quand il est coincé, et que dans ce cas il se contente de prendre un seul jeton en espérant que tu te trompes.

      Un médecin militaire belge, et celui qui a publié avant lui

      Édouard Zeckendorf n’était pas mathématicien. Né à Liège en 1901, il y devient médecin en 1925, puis officier du service de santé de l’armée belge. Les Allemands le font prisonnier en 1940, et il passe toute la guerre dans des camps à soigner d’autres prisonniers alliés. Il quitte l’armée en 1957 avec le grade de colonel. Les maths, il les faisait à côté, en amateur.

      D’après ce qu’il écrit lui-même, il tient son résultat dès 1939. Mais il ne publie sa démonstration qu’en 1972, dans le Bulletin de la Société royale des sciences de Liège. Entre-temps, quelqu’un d’autre l’a fait à sa place : en 1952, le mathématicien néerlandais Gerrit Lekkerkerker publie le théorème dans la revue Simon Stevin et le présente sous le nom de Zeckendorf. Le théorème porte donc ce nom depuis vingt ans quand Zeckendorf publie enfin sa propre version.

      Le jeu, lui, a une autre histoire. Michael Whinihan le présente en 1963 dans le tout premier volume de The Fibonacci Quarterly, une revue entièrement consacrée à la suite de Fibonacci, et il en attribue l’invention à R. E. Gaskell, de l’université d’État de l’Oregon. On le trouve aujourd’hui sous le nom de « Nim de Fibonacci ».

      Je trouve que ce petit pan d’histoire mérite une minute dans ton oral, à condition de le placer au bon endroit. Si tu l’utilises en accroche, il n’apporte pas grand-chose, puisque le jury ne sait pas encore de quoi parle le théorème. Placé après la démonstration, il montre au contraire qu’un résultat qu’on vient de prouver en dix lignes a été trouvé par un médecin qui faisait des maths à côté, et publié d’abord par quelqu’un d’autre.

      Du jeu au codage : séparer des nombres sans séparateur

      L’écriture de Zeckendorf a une conséquence très concrète en informatique, et c’est par là que le sujet rejoint la NSI. Imagine que tu doives envoyer une suite d’entiers, par exemple 55, 100100, 11, sous la forme d’une seule suite de 00 et de 11, sans espace ni virgule, et sans connaître à l’avance la taille des nombres. En binaire, tu enverrais 101101, 11001001100100 et 11, collés : 1011100100110111001001. La personne qui reçoit ce message n’a aucun moyen de savoir où s’arrête chaque nombre.

      Le code de Fibonacci règle ce problème. Il se construit en deux temps, à partir de l’écriture de Zeckendorf en 00 et 11 vue plus haut :

      1. on écrit ses chiffres dans l’ordre inverse, en commençant par celui de F2F_2 ;
      2. on ajoute un 11 à la fin.

      Pour 100=F11+F6+F4100 = F_{11} + F_6 + F_4, l’écriture de Zeckendorf lue de F11F_{11} à F2F_2 est 10000101001000010100. On la retourne, puis on ajoute le 11 final :

      1000010100⟼0010100001⟼0010100001 1\displaystyle 1000010100 \quad \longmapsto \quad 0010100001 \quad \longmapsto \quad 0010100001\,\mathbf{1}

      Comme deux termes de Zeckendorf ne sont jamais consécutifs, deux 11 ne se suivent jamais à l’intérieur d’une écriture. La seule fois où on voit apparaître 1111, c’est à la fin du mot, grâce au 11 ajouté. Celui qui reçoit le message lit les bits un par un et sait qu’un nombre se termine dès qu’il rencontre deux 11 à la suite depuis le début du mot en cours, puis il repart de zéro pour le nombre suivant. Pour la suite 55, 100100, 11, on envoie 0001100011, puis 0010100001100101000011, puis 1111, et le découpage se fait tout seul.

      Le convertisseur affiche maintenant le code de Fibonacci de chaque entier, à côté de son écriture binaire.

      Tester :
        Les cases cochées ne sont jamais voisines : c'est ce qui permet au code de Fibonacci d'utiliser « 11 » comme marque de fin.

        Ce code a un prix : il est plus long que l’écriture binaire brute. Pour 100100, il faut 1111 bits contre 77 en binaire, et pour 10001000, 1616 bits contre 1010. Mais la comparaison n’est pas équitable, parce que le binaire brut ne sait pas où il s’arrête.

        Compare-le plutôt au code gamma d’Elias, un code binaire qui annonce d’abord la longueur du nombre avant de l’écrire, et qui sait donc lui aussi où il s’arrête. Il lui faut 1313 bits pour 100100 et 1919 bits pour 10001000 : face à lui, le code de Fibonacci devient compétitif.

        Alberto Apostolico et Aviezri Fraenkel ont aussi montré en 1987 qu’il résiste très bien aux erreurs. Avec la plupart des codes de ce type, un seul bit faux au milieu du message décale toute la lecture et rend le reste inutilisable. Avec le code de Fibonacci, l’erreur n’abîme qu’au plus trois nombres, parce que le lecteur se recale dès qu’il rencontre le prochain 1111.

        Pour être honnête avec toi, ce code reste réservé à des usages assez spécialisés : tu ne le trouveras ni dans un fichier ZIP ni dans une image PNG. Présente-le au jury comme une conséquence élégante du théorème, et ça suffit largement.

        Trois oraux avec le même matériau

        Tout ce qui précède peut nourrir trois oraux différents, selon la question que tu choisis de poser. À toi de voir lequel colle à tes spécialités.

        1. « Peut-on gagner à coup sûr au jeu de Fibonacci ? » C’est l’oral le plus vivant. Tu pars du jeu, tu montres le tableau des petits tas, tu fais apparaître les nombres de Fibonacci, puis tu énonces le théorème de Zeckendorf et la stratégie qui en découle. Au tableau, tu dois pouvoir dérouler une partie complète sur un tas de 20 jetons. Tu démontres l’inégalité Fk+2>2FkF_{k+2} > 2F_k, valable pour tout entier k≥2k \geq 2, et tu admets le reste de la preuve de la stratégie, en le disant.

        2. « Pourquoi chaque entier n’a-t-il qu’une seule écriture en nombres de Fibonacci ? » Si tu aimes les preuves, prends plutôt l’unicité comme fil rouge. L’algorithme glouton sert d’entrée en matière, et le cœur de l’exposé devient le lemme, démontré par récurrence, puis l’unicité qui en découle. Le jeu peut alors servir d’ouverture en fin d’exposé, au lieu d’en être le point de départ.

        3. « Comment envoyer des nombres à la suite sans séparateur ? » Avec la NSI en spécialité, c’est sans doute celui-là que je choisirais. Le problème de transmission pose la question, le binaire brut montre pourquoi elle n’est pas triviale, et le code de Fibonacci y répond, à condition d’expliquer pourquoi 1111 ne peut apparaître qu’à la fin. Le théorème de Zeckendorf devient alors l’outil qui garantit que le code fonctionne, et tu peux en présenter la preuve d’unicité comme le moment mathématique de ton exposé.

        Dans les trois cas, tu restes sur des notions que tu as vues en cours : les suites définies par récurrence, le raisonnement par récurrence, l’algorithmique avec une fonction Python qui décompose un entier, et l’écriture binaire. Pendant les vingt minutes de préparation, je te conseille de préparer sur ton brouillon un seul exemple numérique, déroulé en entier, plutôt que trois exemples survolés. Le jury retient plus facilement une décomposition qu’il a vue se construire sous ses yeux.

        Si tu veux comparer avec d’autres façons d’aborder Fibonacci, l’article sur le théorème de Lamé part de l’algorithme d’Euclide, et l’article qui présente toute la série détaille les autres angles possibles.

        Les questions qu’on peut te poser

        Pendant l’échange, le jury cherche à voir si tu comprends ce que tu as présenté, et sur ce sujet, certaines questions sont prévisibles. Prépare au moins celles-ci.

        Pourquoi commencer à F2F_2 et pas à F1F_1 ?

        Parce que F1=F2=1F_1 = F_2 = 1. Si tu autorises les deux, tu perds l’unicité tout de suite :

        4=F4+F1=F4+F2\displaystyle 4 = F_4 + F_1 = F_4 + F_2

        Dans les deux écritures, les indices ne sont pas voisins. Le piège vient de ce que deux indices différents donnent la même valeur, donc on n’en garde qu’un.

        L’algorithme glouton marche-t-il avec n’importe quelle liste de nombres ?

        Non. Prends des pièces de 11, 33 et 44 euros, et essaie de rendre 66 euros avec le moins de pièces possible. Le glouton prend d’abord 44, puis 11, puis 11, soit trois pièces, alors que 3+33 + 3 n’en demande que deux. C’est le problème du rendu de monnaie, que tu as peut-être croisé en NSI. Avec les nombres de Fibonacci, le glouton tombe toujours sur la bonne écriture, parce que le lemme force le choix du plus grand terme : si tu le laisses de côté, les termes plus petits, pris sans deux voisins, valent au plus Fk−1F_k - 1 et ne suffisent plus à atteindre nn. Attention quand même, les deux problèmes ne cherchent pas la même chose : le rendu de monnaie veut le moins de pièces possible, Zeckendorf veut une écriture unique.

        Le code de Fibonacci est-il plus court que le binaire ?

        Non, il est plus long que le binaire brut, d’environ 44 %44\,\% pour les grands nombres. Pour écrire un grand entier nn, le binaire utilise environ log⁡2n\log_2 n chiffres, alors que l’écriture de Zeckendorf en utilise environ log⁡φn\log_\varphi n, où φ=1+52≈1,618\varphi = \dfrac{1 + \sqrt{5}}{2} \approx 1{,}618 est le nombre d’or. Le rapport des deux longueurs vaut :

        log⁡φnlog⁡2n=ln⁡2ln⁡φ≈1,44\displaystyle \dfrac{\log_\varphi n}{\log_2 n} = \dfrac{\ln 2}{\ln \varphi} \approx 1{,}44

        Son intérêt est ailleurs : il sait où il s’arrête, et il résiste bien aux erreurs.

        Combien de termes contient en moyenne une écriture de Zeckendorf ?

        C’est une question d’ouverture, et tu n’as pas besoin de la démontrer. Lekkerkerker a montré dans son article de 1952 que, pour un grand entier kk, les entiers nn tels que Fk≤n<Fk+1F_k \leq n < F_{k+1} ont en moyenne un nombre de termes proche de :

        kφ2+1≈0,28 k\displaystyle \dfrac{k}{\varphi^2 + 1} \approx 0{,}28\,k

        Autrement dit, une écriture de Zeckendorf utilise en moyenne un peu plus d’une case sur quatre.

        La revanche

        Retourne au jeu du début : sur n’importe quel tas qui n’est pas un nombre de Fibonacci, tu sais maintenant gagner à coup sûr en commençant : tu décomposes, tu retires le plus petit terme, et tu recommences à chaque tour. Essaie avec 50 jetons, puis avec 100, en laissant la décomposition cachée, et vérifie que tu arrives à la retrouver de tête.

        En 1957, un collégien de Brooklyn, George Bergman, va encore plus loin : il publie dans Mathematics Magazine un système de numération dont la base est le nombre d’or lui-même. Dans ce système, 22 s’écrit 10,0110{,}01, parce que :

        2=φ1+φ−2\displaystyle 2 = \varphi^{1} + \varphi^{-2}

        Et on y retrouve la même règle que chez Zeckendorf : jamais deux 11 côte à côte. Si tu cherches une ouverture pour la fin de ton exposé, tu la tiens.

        Et si tu cherches un autre sujet, ils sont tous rassemblés sur la page Grand oral.

        Sources

        • Zeckendorf, É. (1972). Représentation des nombres naturels par une somme de nombres de Fibonacci ou de nombres de Lucas. Bulletin de la Société royale des sciences de Liège, 41, pp. 179-182.
        • Lekkerkerker, C. G. (1952). Voorstelling van natuurlijke getallen door een som van getallen van Fibonacci. Simon Stevin, 29, pp. 190-195.
        • Whinihan, M. J. (1963). Fibonacci Nim. The Fibonacci Quarterly, 1(4), pp. 9-13.
        • Apostolico, A. et Fraenkel, A. S. (1987). Robust transmission of unbounded strings using Fibonacci representations. IEEE Transactions on Information Theory, 33(2), pp. 238-245.
        • Bergman, G. (1957). A number system with an irrational base. Mathematics Magazine, 31(2), pp. 98-110.
        • Kimberling, C. (1998). Edouard Zeckendorf. The Fibonacci Quarterly, 36(5), pp. 416-418.
        • Knuth, D. E. The Art of Computer Programming, Volume 1: Fundamental Algorithms, section 1.2.8 « Fibonacci Numbers », exercice 34. Addison-Wesley, 3e éd., 1997.