Entrez les coefficients de l’équation diophantienne linéaire ax + by = c. L’équation ci-dessous est reliée aux champs de saisie : vous pouvez aussi modifier directement ses nombres. Changez « Solutions cherchées » pour ne garder que les solutions entières positives.
Table des matières
-
Ce que vous pouvez faire sur cette page
-
À quoi sert ce calcul ?
-
Mode d'emploi
-
Formules et graphiques
-
Symboles et termes
-
Ce qu’il est utile de savoir avant de commencer
-
Calculer avec Excel
-
Calculer avec Google Sheets
-
Calculer avec Python
-
Écrire la formule en LaTeX et autres langages mathématiques (à copier-coller)
-
Faire faire le calcul par ChatGPT
-
Les atouts de DataChef
-
Fonctions connexes
-
Liste des calculatrices NumberChef
Ce que vous pouvez faire sur cette page
- Saisissez les coefficients entiers \(a,\ b,\ c\) et obtenez les couples d’entiers \(x,\ y\) qui vérifient \(ax + by = c\) (les solutions entières)
- Quand \(c\) n’est pas un multiple du plus grand commun diviseur de \(a\) et \(b\), il n’y a aucune solution entière. La page le vérifie et explique aussi pourquoi
- Vous suivez ligne par ligne le tableau des divisions de l’algorithme d’Euclide et le tableau qui remonte les restes pour construire une solution particulière
- La réponse n’est pas un seul couple : vous obtenez la solution générale \(x = x_0 + \dfrac{b}{g}t,\ y = y_0 - \dfrac{a}{g}t\) (où \(t\) est un entier quelconque) et un tableau des solutions pour différentes valeurs de \(t\)
- Vous pouvez ne garder que les solutions strictement positives ou que les solutions positives ou nulles. Cela résout directement des problèmes comme « combien de places à 50 € et à 80 € faut-il pour dépenser exactement 1 000 € ? »
À quoi sert ce calcul ?
Acheter uniquement des places à 50 € et à 80 € pour dépenser exactement 1 000 €, peser un objet avec seulement deux sortes de masses marquées, obtenir une longueur exacte avec des morceaux de longueurs fixes : ces problèmes du type « combiner des choses de tailles fixes pour atteindre exactement un objectif » reviennent exactement à chercher les solutions entières de \(ax + by = c\).
On ne peut pas acheter un nombre négatif de places : en pratique, la réponse n’apparaît qu’une fois qu’on ne garde que les solutions entières positives.
Si vous n’avez que des boîtes de 6 et des boîtes de 10, pouvoir emballer une commande d’exactement \(c\) articles dépend de l’existence d’une solution de \(6x + 10y = c\) en entiers positifs ou nuls. Le PGCD de 6 et 10 est 2 : une commande d’un nombre impair d’articles ne pourra jamais être emballée exactement, quelle que soit la combinaison de boîtes.
Dans le conditionnement d’aliments ou de pièces, savoir quelles quantités sont réalisables indique quelles commandes accepter et quelles tailles de boîtes stocker.
La célèbre énigme qui consiste à mesurer exactement 4 L avec seulement un bidon de 5 L et un bidon de 3 L correspond aux solutions entières de \(5x + 3y = 4\) (\(x\) et \(y\) comptent, avec un signe, combien de fois chaque bidon est rempli ou vidé). Comme \(\gcd(5,\ 3) = 1\), l’équation vous dit d’avance que ces deux bidons permettent de mesurer n’importe quel nombre entier de litres.
C’est le même raisonnement qu’au laboratoire ou en cuisine quand on se demande : « Puis-je mesurer la quantité nécessaire avec les seuls ustensiles que j’ai ? »
Le chiffrement RSA, qui protège la banque et les achats en ligne, construit la valeur \(d\) de la clé privée à partir de la valeur \(e\) de la clé publique en résolvant l’équation diophantienne linéaire \(e d + \varphi k = 1\) (\(\varphi\) est un entier qui dépend de la clé). L’outil utilisé est le même algorithme d’Euclide étendu que sur cette page.
Cette méthode résout l’équation instantanément, même pour des nombres de plusieurs centaines de chiffres, et c’est l’une des choses qui rendent ce chiffrement utilisable en pratique.
Supposons que le produit A consomme \(a\) kg de matière par unité et le produit B \(b\) kg, et que vous vouliez utiliser exactement les \(c\) kg dont vous disposez. Ce plan revient à chercher les solutions de \(ax + by = c\) en entiers positifs ou nuls. On ne peut pas fabriquer un demi-produit : la réponse doit être un nombre entier.
Le domaine qui traite les problèmes de planification dont les réponses doivent être entières s’appelle la programmation en nombres entiers. On l’utilise pour planifier une production, établir des plannings d’équipes, organiser des livraisons, etc.
Formules et graphiques
Symboles et termes
Symboles
| \(a,\ b\) | a, b | Les coefficients qui multiplient \(x\) et \(y\). Par tradition, on désigne les nombres fixés par les premières lettres de l’alphabet, \(a,\ b,\ c\). Sur cette page, ce sont des entiers. |
| \(c\) | c | La constante du membre de droite de l’équation, d’après l’initiale de « constante ». C’est le total à atteindre, et selon qu’il est ou non un multiple du PGCD, l’équation a des solutions ou non. |
| \(x,\ y\) | x, y | Les inconnues à trouver. Désigner les inconnues par les dernières lettres de l’alphabet est une habitude qu’aurait popularisée Descartes. Sur cette page, seules les valeurs entières comptent comme réponses. |
| \(\gcd(a,\ b)\) | PGCD de a et b | Le plus grand commun diviseur de \(a\) et \(b\). C’est la notation internationale, d’après l’anglais « greatest common divisor » ; en France, on écrit plutôt \(\mathrm{PGCD}(a\,;\,b)\) ou \(a \wedge b\). |
| \(g\) | g | Une notation courte pour le plus grand commun diviseur \(\gcd(a,\ b)\), d’après l’initiale de l’anglais « greatest ». Elle raccourcit les formules, comme \(\dfrac{b}{g}\) et \(\dfrac{a}{g}\) dans la solution générale. |
| \(x_0,\ y_0\) | x zéro, y zéro | La solution particulière, c’est-à-dire la première solution entière trouvée. Le petit 0 indique le point de départ, « la solution numéro 0 ». Toutes les solutions entières s’écrivent à partir d’elle. |
| \(x_1,\ y_1\) | x indice 1, y indice 1 | Le couple d’entiers obtenu en remontant l’algorithme d’Euclide. Il vérifie \(a x_1 + b y_1 = g\). En le multipliant par \(\dfrac{c}{g}\), on obtient la solution particulière \((x_0\,;\,y_0)\). |
| \(t\) | t | Une variable qui peut prendre n’importe quelle valeur entière (un paramètre). Elle permet de décrire toutes les solutions entières avec une seule formule. Chaque entier choisi pour \(t\) donne une autre solution entière. |
| \(m\) | m | L’entier qui indique combien de fois \(g\) est contenu dans \(c\). On utilise souvent \(m\), \(n\) ou \(k\) pour des entiers ; \(m\) viendrait de « multiple ». Il existe des solutions entières quand on peut écrire \(c = g \times m\), et seulement dans ce cas. |
| \(q\) | q | Le quotient d’une division, d’après l’initiale de « quotient ». Dans le tableau de l’algorithme d’Euclide, c’est le \(2\) de \(13 = 5 \times 2 + 3\). |
| \(r\) | r | Le reste d’une division, d’après l’initiale de l’anglais « remainder » (on le note aussi \(r\) en France, comme « reste »). Dans le tableau de l’algorithme d’Euclide, c’est le \(3\) de \(13 = 5 \times 2 + 3\). L’algorithme s’arrête quand ce reste devient 0. |
| \(\geqslant\) | supérieur ou égal à | Le signe d’inégalité qui signifie « le membre de gauche est supérieur ou égal au membre de droite ». \(x \geqslant 1\) signifie que \(x\) vaut 1 ou plus. Son pendant \(\leqslant\) signifie « inférieur ou égal à ». |
Termes
| équation diophantienne linéaire | Une équation du premier degré à deux inconnues, mais une seule équation, comme \(ax + by = c\). Dans les réels, tous les points de la droite sont des solutions : la solution n’est pas unique. Même en ne gardant que les solutions entières, il y en a en général une infinité. C’est le cas le plus simple d’équation diophantienne. |
| équation diophantienne | Le nom des équations dont on cherche les solutions en nombres entiers. Il vient de Diophante, mathématicien de la Grèce antique. L’équation diophantienne linéaire de cette page en est le cas le plus simple. |
| solution entière | Une solution de l’équation où \(x\) et \(y\) sont tous deux des entiers. Dans les problèmes sur des quantités qu’on ne peut pas couper, comme des nombres de places, d’objets ou de personnes, seules les solutions entières ont un sens. |
| solution particulière | Le premier couple trouvé parmi l’infinité de solutions entières. N’importe quel couple convient. À partir de lui, la solution générale décrit toutes les solutions. |
| solution générale | Toutes les solutions entières écrites avec une seule formule à l’aide d’un entier \(t\). Chaque entier choisi pour \(t\) donne une autre solution. |
| PGCD (plus grand commun diviseur) | Le plus grand entier positif qui divise chacun de deux entiers ou plus. Dans une équation diophantienne linéaire, cette valeur décide à la fois s’il existe des solutions et de l’écart entre elles. |
| algorithme d’Euclide | Une méthode pour trouver le plus grand commun diviseur : on divise le plus grand nombre par le plus petit et on remplace le couple par le diviseur et le reste, encore et encore. Le diviseur de l’étape où le reste devient 0 est le PGCD. Elle figure dans les « Éléments » d’Euclide, vers le IIIe siècle av. J.-C., et on la présente souvent comme le plus ancien algorithme du monde. |
| algorithme d’Euclide étendu | Une méthode pour écrire le plus grand commun diviseur sous la forme \(a x_1 + b y_1\) en substituant les égalités de division de l’algorithme d’Euclide, de bas en haut. Elle sert à construire une solution particulière d’une équation diophantienne linéaire. |
| identité de Bézout | Le théorème selon lequel il existe toujours des entiers \(x_1,\ y_1\) tels que \(a x_1 + b y_1 = \gcd(a,\ b)\). Il porte le nom du mathématicien français Étienne Bézout. C’est grâce à lui qu’une équation diophantienne linéaire peut être résolue. |
| premiers entre eux | Deux entiers sont premiers entre eux quand leur plus grand commun diviseur vaut 1. Par exemple, 3 et 4 sont premiers entre eux. \(\dfrac{a}{g}\) et \(\dfrac{b}{g}\) sont toujours premiers entre eux, et c’est pour cela que les solutions sont régulièrement espacées. |
| multiple | Un nombre obtenu en multipliant un entier par un autre entier. Les multiples de \(10\) sont \(\dots,\ -20,\ -10,\ 0,\ 10,\ 20,\ \dots\) Zéro et les nombres négatifs sont aussi des multiples. |
| reste | Ce qui reste quand une division entière ne tombe pas juste. \(13 \div 5\) donne un quotient de \(2\) et un reste de \(3\). L’algorithme d’Euclide ne travaille qu’avec ces restes. |
| quotient | Dans la division euclidienne, le nombre entier de fois que le diviseur est contenu dans le dividende. Dans \(13 = 5 \times 2 + 3\), le quotient est \(2\). |
| point à coordonnées entières | Un point du plan dont l’abscisse et l’ordonnée sont toutes deux des entiers, comme les croisements des lignes d’une feuille quadrillée. Les solutions entières d’une équation diophantienne linéaire sont exactement les points à coordonnées entières de la droite \(ax + by = c\). |
| paramètre | Une variable que l’on peut faire varier librement, utilisée pour écrire tout un ensemble de solutions avec une seule formule. Sur cette page, le paramètre est \(t\). |
| coefficient | Le nombre placé devant une lettre. Dans \(3x\), le coefficient est \(3\). Quand aucun nombre n’est écrit, comme dans \(x\), le coefficient vaut 1. |
| inéquation | Une inégalité qui contient une inconnue, comme \(5t \geqslant 1\), et que l’on résout pour trouver les valeurs possibles. Elle sert ici à ne garder que les solutions entières positives. |
Ce qu’il est utile de savoir avant de commencer
Voici ce qu’il est utile de savoir pour utiliser le calcul de cette page en le comprenant, et pas seulement en appuyant sur le bouton.
Si vous bloquez, revoir ces notions est le chemin le plus court.
| Division euclidienne et reste (CM1-6e, 9-12 ans) |
|
| Diviseurs, multiples et PGCD (CM1-3e, 9-15 ans) |
|
| Calcul littéral et équations du premier degré (5e-4e, 12-14 ans) |
|
| Équations de droites (3e-2de, 14-16 ans) |
|
| Inéquations (3e-2de, 14-16 ans) |
|
| Calculer avec des fractions (6e-4e, 11-14 ans) |
|
Calculer avec Excel
| Coefficient a de x | 50 |
| Coefficient b de y | 80 |
| Constante c du membre de droite | 1000 |
| PGCD g | =PGCD(B1;B2) |
| Reste de c ÷ g | =MOD(B3;B4) |
| Solutions entières ? | =SI(B5=0;"Il y a des solutions";"Pas de solution") |
| Coefficient a de x | 50 |
| Coefficient b de y | 80 |
| x1 donné par l’algorithme d’Euclide | -3 |
| y1 donné par l’algorithme d’Euclide | 2 |
| a×x1 + b×y1 | =B1*B3+B2*B4 |
| PGCD g | =PGCD(B1;B2) |
| Coefficient a de x | 50 |
| Coefficient b de y | 80 |
| Constante c du membre de droite | 1000 |
| PGCD g | =PGCD(B1;B2) |
| Solution particulière x0 | 4 |
| Solution particulière y0 | 10 |
| Entier t | 1 |
| x = x0 + (b/g)×t | =B5+(B2/B4)*B7 |
| y = y0 − (a/g)×t | =B6-(B1/B4)*B7 |
| Vérification a×x + b×y | =B1*B8+B2*B9 |
| Coefficient a de x | 50 |
| Coefficient b de y | 80 |
| PGCD g | =PGCD(B1;B2) |
| Solution particulière x0 | 4 |
| Solution particulière y0 | 10 |
| Borne inférieure de t (avec x ⩾ 1) | =-ENT((B4-1)/(B2/B3)) |
| Borne supérieure de t (avec y ⩾ 1) | =ENT((B5-1)/(B1/B3)) |
| Nombre de solutions entières strictement positives | =MAX(0;B7-B6+1) |
Le premier tableau reprend l’exemple 50x + 80y = 1000. Le PGCD vaut 10 et 1000 ÷ 10 donne un reste de 0 : il affiche donc « Il y a des solutions ». Remplacez 1000 par 1001 et il affiche « Pas de solution ».
Le deuxième tableau vérifie que x1 = −3 et y1 = 2, obtenus en remontant l’algorithme d’Euclide, vérifient bien l’identité de Bézout : 50×(−3) + 80×2 = 10, ce qui est bien le PGCD.
Le troisième tableau tire une solution de la solution générale. Avec t = 1, on obtient x = 12 et y = 5, et la ligne de vérification redonne 1000. Essayez d’autres entiers pour t.
Le quatrième tableau ne garde que les solutions entières strictement positives. La borne inférieure de t est 0 et la borne supérieure 1 : il y a donc 2 solutions entières strictement positives (t = 0 et t = 1). Ces deux formules valent pour a et b tous deux positifs. Avec un coefficient négatif, le sens de l’inéquation change : attention.
Calculer avec Google Sheets
| Coefficient a de x | 50 |
| Coefficient b de y | 80 |
| Constante c du membre de droite | 1000 |
| PGCD g | =PGCD(B1;B2) |
| Reste de c ÷ g | =MOD(B3;B4) |
| Solutions entières ? | =SI(B5=0;"Il y a des solutions";"Pas de solution") |
| Coefficient a de x | 50 |
| Coefficient b de y | 80 |
| x1 donné par l’algorithme d’Euclide | -3 |
| y1 donné par l’algorithme d’Euclide | 2 |
| a×x1 + b×y1 | =B1*B3+B2*B4 |
| PGCD g | =PGCD(B1;B2) |
| Coefficient a de x | 50 |
| Coefficient b de y | 80 |
| Constante c du membre de droite | 1000 |
| PGCD g | =PGCD(B1;B2) |
| Solution particulière x0 | 4 |
| Solution particulière y0 | 10 |
| Entier t | 1 |
| x = x0 + (b/g)×t | =B5+(B2/B4)*B7 |
| y = y0 − (a/g)×t | =B6-(B1/B4)*B7 |
| Vérification a×x + b×y | =B1*B8+B2*B9 |
| Coefficient a de x | 50 |
| Coefficient b de y | 80 |
| PGCD g | =PGCD(B1;B2) |
| Solution particulière x0 | 4 |
| Solution particulière y0 | 10 |
| Borne inférieure de t (avec x ⩾ 1) | =-ENT((B4-1)/(B2/B3)) |
| Borne supérieure de t (avec y ⩾ 1) | =ENT((B5-1)/(B1/B3)) |
| Nombre de solutions entières strictement positives | =MAX(0;B7-B6+1) |
Calculer avec Python
from math import gcd
# coefficients de ax + by = c (entiers)
a, b, c = 50, 80, 1000
def extended_gcd(x, y):
# algorithme d'Euclide étendu : renvoie le PGCD et s, t tels que x*s + y*t = PGCD
if y == 0:
return x, 1, 0
g, s, t = extended_gcd(y, x % y)
return g, t, s - (x // y) * t
g = gcd(a, b)
if c % g != 0:
print(f"{c} n'est pas un multiple de {g}, il n'y a donc pas de solution entière")
else:
_, s, t = extended_gcd(a, b)
x0, y0 = s * (c // g), t * (c // g) # solution particulière (une solution entière)
step_x, step_y = b // g, a // g # pas de x et pas de y
# on décale jusqu'à ce que x soit la plus petite valeur positive ou nulle, pour une solution plus lisible
n = x0 // step_x
x0, y0 = x0 - n * step_x, y0 + n * step_y
print(f"Solution particulière : (x ; y) = ({x0} ; {y0})")
print(f"Solution générale : x = {x0} + {step_x}t, y = {y0} - {step_y}t (t entier quelconque)")
for k in range(-2, 3):
print(f" t = {k:2} : (x ; y) = ({x0 + step_x * k} ; {y0 - step_y * k})")
# on ne garde que les solutions entières strictement positives (x >= 1 et y >= 1)
t_low = -((1 - x0) // -step_x)
t_high = (y0 - 1) // step_y
print("Solutions entières strictement positives :", [(x0 + step_x * k, y0 - step_y * k)
for k in range(t_low, t_high + 1)])
Écrire la formule en LaTeX et autres langages mathématiques (à copier-coller)
c = gcd(a, b) × m
c = \gcd(a, b) \times m
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>c</mi>
<mo>=</mo>
<mi>gcd</mi><mo>(</mo><mi>a</mi><mo>,</mo><mi>b</mi><mo>)</mo>
<mo>×</mo>
<mi>m</mi>
</mrow>
</math>
c = gcd(a, b) * m
Mod[c, GCD[a, b]] == 0
irem(c, igcd(a, b)) = 0;
mod(c, gcd(a, b)) == 0
c = gcd(a,b) × m
a·x₁ + b·y₁ = gcd(a, b)
a x_1 + b y_1 = \gcd(a, b)
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>a</mi><msub><mi>x</mi><mn>1</mn></msub>
<mo>+</mo>
<mi>b</mi><msub><mi>y</mi><mn>1</mn></msub>
<mo>=</mo>
<mi>gcd</mi><mo>(</mo><mi>a</mi><mo>,</mo><mi>b</mi><mo>)</mo>
</mrow>
</math>
a*x_1 + b*y_1 = gcd(a, b)
ExtendedGCD[a, b]
igcdex(a, b, x1, y1);
[g, x1, y1] = gcd(a, b);
a x_1 + b y_1 = gcd(a,b)
x = x₀ + (b/g)t, y = y₀ − (a/g)t
x = x_0 + \frac{b}{g} t, \quad y = y_0 - \frac{a}{g} t
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<mi>x</mi><mo>=</mo><msub><mi>x</mi><mn>0</mn></msub>
<mo>+</mo>
<mfrac><mi>b</mi><mi>g</mi></mfrac><mi>t</mi>
<mo>,</mo><mspace width="1em"/>
<mi>y</mi><mo>=</mo><msub><mi>y</mi><mn>0</mn></msub>
<mo>−</mo>
<mfrac><mi>a</mi><mi>g</mi></mfrac><mi>t</mi>
</mrow>
</math>
x = x_0 + (b/g)t, y = y_0 - (a/g)t
Solve[a x + b y == c, {x, y}, Integers]
isolve(a*x + b*y = c);
S = solve(a*x + b*y == c, [x y], 'Integer', true);
x = x_0 + (b/g)t, y = y_0 - (a/g)t
x₀ + (b/g)t ⩾ 1 et y₀ − (a/g)t ⩾ 1
x_0 + \frac{b}{g} t \geqslant 1, \quad y_0 - \frac{a}{g} t \geqslant 1
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msub><mi>x</mi><mn>0</mn></msub>
<mo>+</mo>
<mfrac><mi>b</mi><mi>g</mi></mfrac><mi>t</mi>
<mo>⩾</mo><mn>1</mn>
<mo>,</mo><mspace width="1em"/>
<msub><mi>y</mi><mn>0</mn></msub>
<mo>−</mo>
<mfrac><mi>a</mi><mi>g</mi></mfrac><mi>t</mi>
<mo>⩾</mo><mn>1</mn>
</mrow>
</math>
x_0 + (b/g)t >= 1 and y_0 - (a/g)t >= 1
Solve[a x + b y == c && x >= 1 && y >= 1, {x, y}, Integers]
isolve({a*x + b*y = c, x >= 1, y >= 1});
S = solve([a*x + b*y == c, x >= 1, y >= 1], [x y], 'Integer', true);
x_0 + (b/g)t ⩾ 1, y_0 − (a/g)t ⩾ 1
Faire faire le calcul par ChatGPT
Tu es un assistant de calcul en arithmétique (propriétés des nombres entiers). Effectue le calcul suivant en exécutant réellement du code Python, et fonde ta réponse uniquement sur les nombres obtenus à l’exécution (ne réponds pas de tête ni par estimation). Trouve les solutions entières de l’équation diophantienne linéaire 50x + 80y = 1000. Donne chacun des éléments suivants : 1. Le PGCD de 50 et 80, et si 1000 en est un multiple 2. Les étapes de division de l’algorithme d’Euclide (jusqu’à un reste nul), et les x1, y1 tels que 50×x1 + 80×y1 = PGCD obtenus en remontant ces étapes 3. Une solution particulière (x0 ; y0) et la solution générale x = x0 + (b/g)t, y = y0 − (a/g)t 4. Toutes les solutions entières où x et y valent tous deux 1 ou plus En Python, utilise math.gcd et l’algorithme d’Euclide étendu pour calculer exactement, et indique les formules utilisées et les nombres obtenus à l’exécution.
Mode d'emploi
-
1Saisissez vos nombresTapez les nombres à calculer dans les champs de saisie
-
2CalculezAppuyez sur le bouton « Calculer »
-
3Lisez le résultatLe résultat s’affiche aussitôt. La même page explique aussi le raisonnement et la formule
Les atouts de DataChef
Aucune compétence requise – simple et intuitif
Aucune donnée personnelle nécessaire
Le fichier est supprimé automatiquement après le téléchargement
Aucune mention de crédit nécessaire
Aucune autorisation préalable nécessaire