Voici un extrait de "La Vie, Mode d'emploi" de Georges Perec.
Il y a quelques années, Morellet a essayé de le décourager en lui apprenant que le nombre qui s'écrit 999, c'est-à-dire
neuf puissance neuf à la puissance neuf , qui est le plus grand nombre que l'on puisse écrire en se servant uniquement de trois chiffres , aurait, si on l'écrivait en entier, trois cent soixante-neuf millions de chiffres, qu'à raison d'un chiffre par seconde, on en aurait pour onze ans à l'écrire, et qu'en comptant deux chiffres par centimètre, le nombre aurait mille huit cent quarante-cinq kilomètres de long !
Des questions
Quel est le nombre exact de chiffres de l'entier a = (99)9 ?
Quel est le nombre exact de chiffres de l'entier b = 9 ( 9 9) ?
Donner le code html utilisé pour écrire ces deux entiers (on a utilisé la balise
<sup>).
(99)9
Cet entier est de taille encore raisonnable pour un calcul python.
On peut utiliser le programme suivant :
from math import floor, log
def nbDeChiffres( n ) :
return floor( log(n, 10) ) +1
a = (9**9)**9
print(a)
print( "Nombre de chiffres de a : ", len( str(a) ) )
print( "Nombre de chiffres de a : ", nbDeChiffres( a ) )
avec lequel on obtient :
196627050475552913618075908526912116283103450944214766927315415537966391196809
Nombre de chiffres de a : 78
Nombre de chiffres de a : 78
9 ( 9 9)
La longueur de cet entier rend le programme précédent inopérant.
Pour régler le problème, nous allons utiliser les propriétés du logarithme. Vous savez que pour tout
réel \( x \), on a l'égalité : \( \ln(9^x) = x \ln(9) \).
D'où \( \log_{10}(9^x) = \frac{ \ln(9^x)}{\ln(10)} =\frac{x \ln(9 )}{\ln(10)}= x \log_{10}(9). \)
En particulier, avec \( x = 9^9 \), on obtient :
\[ \log_{10}\left( 9^{(9^9)} \right) = 9^9 \log_{10}(9) \]
L'intérêt de cette transformation est d'obtenir un nombre accessible au calcul python :
from math import floor, log
c = (9**9) * log(9,10)
print( "Nombre de chiffres de b = 9**(9**9) : ", floor(c) +1 )
programme avec lequel on obtient :
Nombre de chiffres de b = 9**(9**9) : 369693100
On retrouve les trois cent soixante-neuf millions (et quelques milliers de chiffres en plus !) de Georges Perec.
Codage html
Code pour l'entier a = (99)9 :
(9<sup>9</sup>)<sup>9</sup>
Code pour l'entier b = 9 ( 9 9) :
9<sup> ( 9 <sup>9</sup>) </sup>
Regroupement par deux.
Principe du regroupement par deux.
On dispose de neuf objets (les carrés noirs de la ligne 1 ci-dessous).
On les regroupe deux par deux (dans l'ordre de gauche à droite,
le dernier se retrouve seul dans ce cas), ce qui donne la ligne rouge.
Puis on regroupe les paquets rouges deux par deux, ce qui donne les paquets bleus.
On regroupe alors les paquets bleus deux par deux, ce qui donne le regroupement rose.
Et une dernière association par paire finit de
les regrouper.
On constate qu'avec x=9 paquets au départ, il a fallu 4 niveaux de regroupements (le dessin ci-dessus
est appelé un arbre, le nombre 4 est appelé sa hauteur).
L'objectif ici est de comprendre que ce nombre 4 est dû au fait que l'on a
\(2^3 < x \leqslant 2^4 \)
(on a donc 4 = blog(x)).
Des questions
Avec 10 paquets au départ, combien aura-t-on de niveaux de regroupements ? (faîtes le dessin !)
Avec 8 paquets ?
Expliquer pourquoi avec un nombre x de paquets tels que \( 2^{n-1} < x \leqslant 2^n \) (où n est
un entier naturel), on aura exactement n niveaux de regroupements.
En d'autres termes, le nombre de niveaux de regroupements est
blog(x).
Regroupement de dix deux par deux
Il y a 4 = blog(10) niveaux de regroupements.
Regroupement de huit paquets, deux par deux.
3 = blog(8) niveaux de regroupement.
Cas général
Partons d'un cas avec x objets.
On note \( x_0 = x \) le nombre de paquets au départ, \(x_1 \) le nombre de paquets après une étape de regroupement,
\(x _2 \) le nombre de paquets après un second regroupement par paires, etc...
Notons \( n = \text{blog}(x) \), ce qui signifie que l'on a \( 2^{n-1} < x \leqslant 2^n \).
Comme \( 2^{n-1} < x \leqslant 2^n \), on a \( 2^{n-2} < x_1 \leqslant 2^{n-1} \).
En effet :
On ne peut avoir \( x_1 \leqslant 2^{n-2} \), car alors \( 2x_1 \leqslant 2^{n-1} \), or il est clair
que l'on a nécessairement \( x \leqslant 2x_1 \) (puisque chaque paquet de niveau 1 contient au plus 2
paquets du niveau 0). On aurait donc \( x \leqslant 2^{n-1} \), ce qui n'est pas.
Il est clair également que \( x_1 \leqslant 2^{n-1} \), puisqu'avec \( x \leqslant 2^n \) paquets au niveau 0,
on produira au niveau 1 au
plus le nombre de paquets réalisé dans le cas de \( 2^n \) paquets (qui est clairement égal à \( 2^{n-1} \)).
Une autre façon d'exprimer ceci :
Soit \(x\) est pair et dans ce cas, on a \( x = 2x_1 \). Dans ce cas, l'inégalité \( 2^{n-1} < x \leqslant 2^n \) entraîne
\( 2^{n-2} < \frac{x}{2} \leqslant 2^{n-1} \), c'est à dire \( 2^{n-2} < x_1 \leqslant 2^{n-1} \).
Soit \(x\) est impair et dans ce cas, on a \( 2x_1 = x+1 \). L'inégalité \( 2^{n-1} < x \leqslant 2^n \) s'écrit en fait
\( 2^{n-1} < x < 2^n \) (car \(x\) , impair, ne peut être égal à \( 2^n \) ) et on a donc \( 2^{n-1} < x+1 \leqslant 2^n \)
(puisqu'il s'agit d'entiers). On a donc à nouveau évidemment \( 2^{n-2} < x_1 \leqslant 2^{n-1} \) .
De même \( 2^{n-3} < x_2 \leqslant 2^{n-2} \).
En poursuivant ainsi, on a \( 2^{n-(n-1)-1} < x_{n-1} \leqslant 2^{n-(n-1)} \),
soit \( 2^{0} < x_{n-1} \leqslant 2^{1} \) ou encore \(1 < x_{n-1} \leqslant 2 \).
Comme \( x_{n-1} \) est un entier, on a en fait \( x_{n-1}= 2 \) , il reste donc encore une étape pour tout
regrouper. Et on a \( x_n = 1 \).
Il a donc bien fallu \( n = \text{blog}(x) \) étapes.