Adloun

Écrire zeros terminaux(n) , qui renvoie le nombre de zéros terminant…

Exercice de TD · niveau 2 · NSI (première), chapitre 1 — Représenter les entiers · Écrire un nombre dans une base

Énoncé

Écrire zeros_terminaux(n), qui renvoie le nombre de zéros terminant l'écriture binaire de . Quel renseignement arithmétique ce nombre donne-t-il sur ? Le vérifier sur machine pour tous les de à .

Corrigé


def zeros_terminaux(n):
    """Nombre de 0 à la fin de l'écriture binaire de n >= 1."""
    k = 0
    while n % 2 == 0:
        n = n // 2
        k = k + 1
    return k

Ce que ce nombre dit. Terminer par zéros en base deux, c'est être divisible par et pas par — exactement comme, en base dix, terminer par zéros signifie être divisible par et pas par . Le cherché est donc l'exposant de dans la décomposition de en facteurs premiers.

La vérification :


for n in range(1, 5000):
    k = zeros_terminaux(n)
    assert n % 2**k == 0 and n % 2**(k + 1) != 0

Contrôle : zeros_terminaux(2026) vaut ( avec impair), et zeros_terminaux(2048) vaut , puisque s'écrit 100000000000.

Terminaison : la boucle divise par à chaque tour et s'arrête dès que est impair ; comme , elle s'arrête au plus tard quand vaut . Pour elle ne s'arrêterait jamais : d'où la précondition .

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.