Aller au contenu

La fonction blog

On définit deux fonctions sur les entiers > 0.

Note

Ceux qui suivront la spécialité mathématiques en terminale découvriront la fonction "plus générale" logarithme.

La fonction dlog

Définition

Tout entier naturel n (non nul) est compris entre deux puissances de 10: 10^k \leqslant n < 10^{k+1}.

Le nombre k sera appelé dlog(n).

Remarque: dlog(n) est donc le plus grand des entiers i vérifiant 10i ≤ n.

Exercice 1

Donner les valeurs de dlog(99), dlog(100), dlog(1000), dlog(101), dlog(1).

Solution
  • 10 \leqslant 99 < 10^2 donc dlog(99) = 1.
  • 10^2 \leqslant 100 < 10^3 donc dlog(100) = 2.
  • 10^2 \leqslant 101 < 10^3 donc dlog(101) = 2.
  • 10^3 \leqslant 1000 < 10^4 donc dlog(100) = 3.
  • 10^0 \leqslant 1 < 10^1 donc dlog(100) = 0.

Important

On retiendra:

Le nombre de chiffres dans l'écriture en base 10 d'un entier naturel n (non nul) est égal à dlog(n)+1.

Exercice 2

Proposer un corps possible pour la fonction python suivante:

def dlog(n):
    """
    n -- entier naturel non nul
    renvoie dlog(n)
    """
Un code possible
def dlog(n):
    """
    n -- entier naturel non nul
    renvoie dlog(n)
    """
    k = 0
    p = 1 # contiendra les puissances de 10 successives
    while p <= n:
        k += 1
        p *= 10
    return k-1

La fonction blog

On définit la fonction blog de façon analogue à la fonction dlog mais en utilisant les puissances de 2.

Définition

Tout entier naturel n (non nul) est compris entre deux puissances de 2: 2^k \leqslant n < 2^{k+1}.

Le nombre k sera appelé blog(n).

Remarque: blog(n) est donc le plus grand des entiers i vérifiant 2i ≤ n.

On aura le même lien avec l'écriture binaire d'un entier (écriture en base 2):

Propriété

Le nombre de chiffres dans l'écriture en base 2 d'un entier naturel n (non nul) est égal à blog(n)+1.

En python, la fonction précédente dans laquelle 10 est remplacé par 2 donnera le résultat de blog(n):

def blog(n):
    """
    n -- entier naturel non nul
    renvoie blog(n)
    """
    k = 0
    p = 1 # contiendra les puissances de 2 successives
    while p <= n:
        k += 1
        p *= 2
    return k-1

Exercice 3

Donner les valeurs de blog(1), blog(2), blog(3), blog(4).

Solution
  • 2^0 \leqslant 1 < 2^1: blog(1) = 0.
  • 2^1 \leqslant 2 < 2^2: blog(2) = 1.
  • 2^1 \leqslant 3 < 2^2: blog(3) = 1.
  • 2^2 \leqslant 4 < 2^3: blog(1) = 2.

Exercice 4

On construit un arbre comme ci-dessous.

On a arrêté la construction... mais il est évident que l'on peut la poursuivre ainsi autant qu'on veut.

Comment utiliser cet arbre pour calculer blog(n) où n est un entier ?

Remarque

Pour dessiner cet arbre, vous remarquerez que:

  • Chaque sommet a exactement deux fils (un fils gauche et un fils droit). Les fils des sommets du niveau le plus bas dessiné ne sont pas représentés mais vous pouvez aisément les imaginer.
  • les sommets sont numérotés de haut en bas et de droite à gauche dans l'ordre usuel.

Vous remarquerez également que cette façon de numéroter donne une formule simple:

  • le fils gauche du sommet marqué k est marqué 2k,
  • le fils droit du sommet marqué k est marqué 2k+1.

Lien avec blog

blog(n) correspond tout simplement au niveau de profondeur dans l'arbre, comme illustré sur la figure ci-dessous.

Exercice 5

Plus k est grand, plus le nombre d'entiers n tels que blog(n) = k est grand (cela se visualise bien avec l'arbre de l'exercice précédent).

Pourriez-vous dire plus précisément combien d'entiers n vérifie blog(n) = k ?

Solution

On peut déjà répondre pour les premiers entiers en observant l'arbre de l'exercice précédent:

  • 1 entier vérifie blog(n) = 0.
  • 2 entiers vérifient blog(n) = 1.
  • 4 entiers vérifient blog(n) = 2.
  • 8 entiers vérifient blog(n) = 3.
  • 16 entiers vérifient blog(n) = 4.

On conjecture, avec ce qui précède, qu'il y a 2k entiers n tels que blog(n) = k.

Preuve.

Les entiers n tels que blog(n) = k sont les entiers n tels que 2^k \leqslant n < 2^{k+1}.
Il y en a C = 2^{k+1} - 2^k.
En factorisant 2^k dans cette expression: C = 2^k \times \left( 2 - 1\right).
On a donc bien \boxed{C = 2^k}.