Aller au contenu

Critère de divisibilité par 3⚓︎

Divisibilité par 3

Un entier est divisible par 3 si la somme de ses chiffres est elle-même divisible par 3.

On peut donc utiliser un algorithme récursif.

  • Les cas de base sont les entiers à 1 chiffre.
  • On pourra utiliser la fonction somme_chiffre vu précédemment pour le cas général.

Exercice

Donnez une fonction récursive est_divisible_par_3 qui détermine si un entier n est divisible par \(3\).

###

def sommepy-undchiffres(n):bksl-nl """Renvoie la somme des chiffres de l'entier positif n"""bksl-nl if n < 10:bksl-nl return nbksl-nl else:bksl-nl return sommepy-undchiffres(n // 10) + (n % 10)bksl-nlbksl-nldef estpy-unddivisiblepy-undparpy-und3(n):bksl-nl """Détermine si n est divisible par 3"""bksl-nl ... # ← à compléterbksl-nlbksl-nlbksl-nlassert estpy-unddivisiblepy-undparpy-und3(6) == Truebksl-nlassert estpy-unddivisiblepy-undparpy-und3(7) == Falsebksl-nlassert estpy-unddivisiblepy-undparpy-und3(516) == Truebksl-nlassert estpy-unddivisiblepy-undparpy-und3(567898765) == Falsebksl-nlbksl-nl

Réponse
🐍 Script Python
def est_divisible_par_3(n):
    """Détermine si n est divisible par 3"""
    cas_base = [True, False, False] * 4
    if n < 12:
        return cas_base[n]
    else:
        return est_divisible_par_3(somme_chiffres(n))

On a étendu à 12 cas de base, avec un tableau codé en dur, qui n'est calculé qu'une seule fois à la création de la fonction.

On aurait pu écrire aussi

🐍 Script Python
def est_divisible_par_3(n):
    """Détermine si n est divisible par 3"""
    if n < 10:
        return n in [0, 3, 6, 9]
    else:
        return est_divisible_par_3(somme_chiffres(n))

La première version est légèrement plus rapide ; la seconde plus facile à lire.

Les deux styles se défendent.

Divisibilité par 9

Un entier est divisible par 9 si la somme de ses chiffres est elle-même divisible par 9.

On pourra donc construire un algorithme similaire.