L'équation ax + by = c est soluble si et seulement si p = PGCD(a,b) divise c
En posant alors a = pa', b = pb' c = pc', si x0,y0 est une solution particulière de a'x + b'y = 1, alors toutes les solutions de ax + by = c sont données par : x = c'x0 - kb' y = c'y0 + ka' où k parcourt Z |
Le problème est de trouver une solution particulière.
Si on peut dans les cas simples opérer par tâtonnements, une équation comme
97x + 29y = 4000 nécessite une méthode plus efficace.
Une méthode possible est l'algorithme d'Euclide "étendu" :
("étendu" car calculant en plus les P et Q)
Posons : r0 = a, r1 = b (a > b > 0)
P0 = 0, P1 = 1 et Q0 = 1, Q1 = 0 Puis répéter depuis i = 2
p = rn-1 est le PGCD de a et b (algorithme d'Euclide)
|
Connaissant une solution de ax + by = 1, on obtient une solution de ax + by = c en multipliant x et y par c.
Avec 97x + 29y = 4000 cela donne :
97 = 29×3 + 10, r2 = 10, q2 = 3, P2 = -3, Q2 = 1
29 = 10×2 + 9, r3 = 9, q3 = 2, P3 = 7, Q3 = -2
10 = 9×1 + 1, r4 = 1, q4 = 1, P4 = -10, Q4 = 3
9 = 1×9 + 0, r5 = 0, c'est fini et x = 3 y = -10 est solution de 97x + 29y = 1
En multipliant par c = 4000, qui est bien un multiple de p = r4 = 1, on obtient
x = 12000 + 29k, y = -40000 - 97k
Qui n'est pas la valeur la plus simple !
Mais si on pose m = k + [12000/29] = k + 413, on trouve :
x = 23 + 29m, y = 61 - 97m .
Script de résolution de ax + by = c avec cet algorithme.
Une étude plus détaillée de l'équation de Diophante.
En particulier une méthode plus "intuitive", mais plus lourde à appliquer, de changements de variables.
Ceci revient dans les faits à l'algorithme d'Euclide,
mais sans l'aspect "parachuté" ci dessus (ou démonstration théorique de sa validité).
Le principe :
97x + 29y = 4000 s'écrit 10x + 29(y + 3x - 137) = 27 soit en posant z = y + 3x - 137 :
10x + 29z = 27.
On poursuit ainsi de proche en proche par changements de variables successifs jusqu'à l'équation triviale
t + 9u = 7 qui possède la solution évidente t = 7, u = 0.
On remonte ensuite tous les changements de variables pour obtenir x et y.
x = 165 - 105m - 7k
y = -110 + 70m + 5k z = 3m + 1 k et m parcourant indépendamment Z |