1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
| # Divisibilité
# Critères de divisibilité par 2,3,4,5,6,7,8,9
# cf https://fr.wikipedia.org/wiki/Liste_de_crit%C3%A8res_de_divisibilit%C3%A9
# fonctions utilitaires
def unite (nombre):
return nombre % 10
def dizaine (nombre):
return (nombre // 10) % 10
def dizaines (nombre):
return (nombre // 10)
def centaine (nombre):
return (nombre // 100) % 10
def sommeChiffres (nombre):
somme = 0
while nombre > 0:
somme = somme + unite(nombre)
nombre = dizaines (nombre)
return somme
# Divisible par 2
# Un nombre est divisible par 2 s'il se termine par 0, 2, 4, 6 ou 8
def divisiblePar2 (nombre):
return unite(nombre) in [0, 2, 4, 6, 8]
# Divisible par 3
# Un nombre est divisible par 3 si la somme des chiffres qui le composent
# donne 0, 3, 6 ou 9
def divisiblePar3 (nombre):
while nombre >= 10:
nombre = sommeChiffres (nombre)
return nombre in [0, 3, 6, 9]
# version récursive
def divisiblePar3Rec (nombre):
if nombre < 10:
return nombre in [0, 3, 6, 9]
else:
return divisiblePar3 (dizaines(nombre)+unite(nombre))
# Divisible par 4
# Un nombre est divisible par 4 si le nombre formé de ses deux derniers chiffres l'est
def divisiblePar4 (nombre):
deuxDerniersChiffres = nombre % 100
return deuxDerniersChiffres in [0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96]
# critere avancé :
# 10d+u = 4 (2d) + 2d + u
# donc pour que du soit divisible par 4, il faut que 2d+u le soit
def divisiblePar4Bis (nombre):
nombre = nombre % 100
while nombre >= 10:
nombre = 2 * dizaine(nombre) + unite(nombre)
return nombre in [0, 4, 8]
# Divisible par 5
# Un nombre est divisible par 5 s'il se termine par 0 ou 5
def divisiblePar5 (nombre):
return unite(nombre) in [0, 5]
# Divisible par 6
# Un nombre est divisible par 6 s'il est divisible par 2 et par 3
def divisiblePar6 (nombre):
return divisiblePar2 (nombre) and divisiblePar3 (nombre)
# Divisible par 7
# Un nombre est divisible par 7 si son nombre de dizaine moins 2 fois son chiffre des unités l'est
def divisiblePar7 (nombre):
while nombre >= 10:
nombre = dizaines(nombre) - 2 * unite(nombre)
# attention ! le nombre obtenu peut etre négatif ! prendre sa valeur absolu
return abs(nombre) in [0, 7]
# Divisible par 8
# Un nombre est divisible par 8 si le nombre formé par ses trois derniers chiffres l'est
# Complément :
# supposons que n = 100c + 10d + u
# = 96c + 4c + 8d + 2d + u
# = 8 (12c+d) + 4c + 2d + u
# d'où n divisible par 8 si 4c+2d+u l'est
#
# Complément (suite) :
# si c est pair 4c+2d+u = 8k+2d+u
# et le nombre sera divisible par 8 si (2d+u) l'est
# si c est impair 4c+2d+u = 8k+2d+u+4
# et le nombre sera divisible par 8 si (2d+u+4) l'est
def divisiblePar8 (nombre):
nombre = nombre % 1000
while (nombre >= 10):
if (centaine(nombre) % 2 == 0):
nombre = 2*dizaine(nombre)+unite(nombre)
else:
nombre = 2*dizaine(nombre)+unite(nombre)+4
return nombre in [0, 8]
# Divisible par 9
# Un nombre est divisible par 9 si la somme des chiffres qui le composent vaut 0 ou 9
def divisiblePar9 (nombre):
while nombre >= 10:
nombre = sommeChiffres (nombre)
return nombre in [0, 9]
# version récusive
def divisiblePar9Rec (nombre):
if nombre < 10:
return nombre in [0, 9]
else:
return divisiblePar3 (dizaines(nombre)+unite(nombre))
# version récusive
def divisiblePar10 (nombre):
return divisiblePar2(nombre) and divisiblePar5(nombre) |
Partager