É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.