La division euclidienne de A par B (entiers relatifs), qui s’écrit A = BxQ + R, impose que le reste R soit positif ou nul (et bien sûr plus petit que la valeur absolue du diviseur B). Ceci implique que pour diviser A par B, on doit chercher le multiple de B qui se rapproche le plus de A, tout en restant inférieur à A, de manière à pouvoir rajouter un reste R positif (éventuellement nul).
Ceci va donner, par exemple :
On divise 103 par 13 -> 103 = 13 x 7 + 12 -> Q = 7 et R = 12
On divise 103 par -13 -> 103 = -13 x (-7) + 12 -> Q = -7 et R = 12
On divise -103 par -13 -> -103 = -13 x 8 + 1 -> Q = 8 et R = 1
On divise -103 par 13 -> -103 = 13 x (-8) + 1 -> Q = -8 et R = 1
La fonction Python « divmod » ne réalise pas la division euclidienne, puisque divmod(103, -13) = (-8,-1), avec un mauvais quotient et un reste négatif, ce qui est contraire à la division euclidienne.
On peut bien sûr former le bon couple (-7,12) en constituant le couple (-divmod(103,13)[0], divmod(103,13)[1])… et se débrouiller dans chaque cas.
Mais je n’arrive pas à savoir s’il existe une fonction Python qui donne directement le bon résultat, suivant les bonnes règles de la division euclidienne.
Une idée ?
Partager