Escribe los coeficientes de la ecuación diofántica lineal ax + by = c. La ecuación de abajo está unida a los campos, así que también puedes cambiar los números directamente en ella. Si cambias «Qué soluciones enteras buscar», te quedas solo con las soluciones enteras positivas.
Índice
-
Qué puedes hacer en esta página
-
¿Para qué sirve este cálculo?
-
Cómo usar
-
Fórmulas y gráficos
-
Símbolos y términos
-
Qué conviene saber de antemano
-
Cómo calcularlo con Excel
-
Cómo calcularlo con Hojas de cálculo de Google
-
Cómo calcularlo con Python
-
La fórmula en LaTeX y otras notaciones matemáticas (para copiar)
-
Cómo pedirle a ChatGPT que haga el cálculo
-
Las ventajas de DataChef
-
Funciones relacionadas
-
Todas las calculadoras de NumberChef
Qué puedes hacer en esta página
- Escribe los coeficientes enteros \(a,\ b,\ c\) y obtén los pares de números enteros \(x,\ y\) que cumplen \(ax + by = c\) (las soluciones enteras)
- Cuando \(c\) no es múltiplo del máximo común divisor de \(a\) y \(b\), no hay soluciones enteras. La página lo comprueba y te explica también por qué
- Puedes seguir, fila a fila, la tabla de divisiones del algoritmo de Euclides y la tabla que recorre hacia atrás los restos para construir una solución particular
- La respuesta no es solo un par: obtienes la solución general \(x = x_0 + \dfrac{b}{g}t,\ y = y_0 - \dfrac{a}{g}t\) (con \(t\) entero) y una tabla de soluciones para distintos valores de \(t\)
- Puedes quedarte solo con las soluciones positivas o solo con las no negativas. Así se resuelven directamente problemas como «¿cuántas entradas de 50 € y de 80 € suman exactamente 1000 €?»
¿Para qué sirve este cálculo?
Comprar solo entradas de 50 € y de 80 € por exactamente 1000 €, pesar algo con solo dos tipos de pesas o formar una longitud exacta con piezas de longitudes fijas: problemas como estos, «combinar cosas de tamaños fijos para llegar justo a un objetivo», son justo el problema de hallar soluciones enteras de \(ax + by = c\).
No se puede comprar un número negativo de entradas, así que en la práctica la respuesta llega solo después de quedarte con las soluciones enteras positivas.
Si solo tienes cajas de 6 y cajas de 10, que puedas empaquetar un pedido de exactamente \(c\) unidades depende de si \(6x + 10y = c\) tiene una solución con enteros que sean 0 o más. El MCD de 6 y 10 es 2, así que un pedido de un número impar de unidades nunca se puede empaquetar exactamente, por mucho que combines las cajas.
Al empaquetar alimentos o piezas, saber qué cantidades se pueden formar te dice qué pedidos puedes aceptar y qué tamaños de caja tener en almacén.
El famoso acertijo de medir exactamente 4 litros con solo una jarra de 5 litros y otra de 3 litros equivale a las soluciones enteras de \(5x + 3y = 4\) (\(x\) e \(y\) cuentan, con signo, cuántas veces se llena o se vacía cada jarra). Como \(\gcd(5,\ 3) = 1\), la ecuación te dice de antemano que con estas dos jarras se puede medir cualquier número entero de litros.
Es la misma matemática que usas en un laboratorio o en la cocina cuando te preguntas: «¿puedo medir la cantidad que necesito solo con los utensilios que tengo?».
El cifrado RSA, que protege la banca y las compras por internet, obtiene el valor de la clave privada \(d\) a partir del valor de la clave pública \(e\) resolviendo la ecuación diofántica lineal \(e d + \varphi k = 1\) (\(\varphi\) es un entero que depende de la clave). La herramienta que se usa es el mismo algoritmo de Euclides extendido que en esta página.
Este procedimiento la resuelve al instante incluso con números de cientos de cifras, y es una de las cosas que hacen práctico el cifrado.
Supón que el producto A usa \(a\) g de material por unidad y el producto B usa \(b\) g, y quieres gastar exactamente los \(c\) g de material que tienes. Este plan es el problema de hallar soluciones de \(ax + by = c\) en enteros que sean 0 o más. No se puede fabricar medio producto, así que la respuesta tiene que ser un número entero.
La rama que trata los problemas de planificación cuyas respuestas tienen que ser enteras se llama programación entera. Se usa en la planificación de la producción, de los turnos de trabajo, de los repartos y más.
Fórmulas y gráficos
Símbolos y términos
Símbolos
| \(a,\ b\) | a, b | Los coeficientes que multiplican a \(x\) y a \(y\). Por costumbre, las letras del principio del alfabeto, \(a,\ b,\ c\), se usan para números fijos. En esta página los dos son enteros. |
| \(c\) | c | La constante del segundo miembro de la ecuación (de «constante»). Es el total que quieres conseguir, y que sea múltiplo del MCD decide si hay soluciones. |
| \(x,\ y\) | x, y | Las incógnitas que quieres hallar. Usar las últimas letras del alfabeto para las incógnitas es una costumbre que se atribuye a Descartes. En esta página solo valen los valores enteros como respuesta. |
| \(\gcd(a,\ b)\) | mcd de a y b | El máximo común divisor de \(a\) y \(b\). En inglés se escribe «gcd» (greatest common divisor) y en España también se escribe m.c.d.(a, b) o mcd(a, b). Algunos libros de teoría de números lo abrevian como \((a,\ b)\). |
| \(g\) | g | Un nombre corto para el máximo común divisor \(\gcd(a,\ b)\). Mantiene cortas las fórmulas, como \(\dfrac{b}{g}\) y \(\dfrac{a}{g}\) en la solución general. |
| \(x_0,\ y_0\) | x sub cero, y sub cero | La solución particular, es decir, la primera solución entera que encuentras. El 0 pequeño la marca como punto de partida, la «solución número 0». Todas las soluciones enteras se escriben a partir de ella. |
| \(x_1,\ y_1\) | x sub uno, y sub uno | El par de enteros que encuentras al recorrer hacia atrás el algoritmo de Euclides. Cumple \(a x_1 + b y_1 = g\). Multiplícalo por \(\dfrac{c}{g}\) y obtienes la solución particular \((x_0\,;\,y_0)\). |
| \(t\) | t | Una variable que puede ser cualquier número entero (un parámetro). Permite describir con una sola fórmula todas las soluciones enteras a la vez. Cada entero que pongas en lugar de \(t\) da otra solución entera. |
| \(m\) | m | El número entero que indica cuántas veces cabe \(g\) en \(c\). Letras como \(m\), \(n\) y \(k\) se usan a menudo para números enteros, y se dice que \(m\) viene de «múltiplo». Hay soluciones enteras cuando se puede escribir \(c = g \times m\), y solo entonces. |
| \(q\) | q | El cociente de una división (del inglés «quotient»). En la tabla del algoritmo de Euclides es el \(2\) de \(13 = 5 \times 2 + 3\). |
| \(r\) | r | El resto de una división (del inglés «remainder»). En la tabla del algoritmo de Euclides es el \(3\) de \(13 = 5 \times 2 + 3\). El algoritmo termina cuando este resto llega a 0. |
| \(\geq\) | mayor o igual que | El signo de la desigualdad «el primer miembro es mayor o igual que el segundo». \(x \geq 1\) dice que \(x\) es 1 o más. Su pareja \(\leq\) dice «menor o igual que». |
Términos
| ecuación diofántica lineal | Una ecuación lineal con dos incógnitas pero una sola ecuación, como \(ax + by = c\). En los números reales, todos los puntos de la recta son solución, así que la solución no es única. Aunque te quedes solo con las soluciones enteras, normalmente hay infinitas. |
| ecuación diofántica | El nombre de las ecuaciones cuyas respuestas tienen que ser números enteros. Viene de Diofanto, un matemático de la Grecia antigua. La ecuación diofántica lineal de esta página es el tipo más básico. |
| solución entera | Una solución de la ecuación en la que \(x\) e \(y\) son números enteros. En los problemas sobre cantidades que no se pueden partir, como entradas, objetos o personas, solo tienen sentido las soluciones enteras. |
| solución particular | El primer par que encuentras entre las infinitas soluciones enteras. Vale cualquiera. A partir de él, la solución general describe todas las soluciones. |
| solución general | Todas las soluciones enteras escritas como una sola fórmula con un entero \(t\). Cada entero que pongas en lugar de \(t\) da otra solución. |
| máximo común divisor (MCD) | El mayor número entero positivo que divide a cada uno de dos o más números enteros. En una ecuación diofántica lineal, este valor decide si hay soluciones y a qué distancia están unas de otras. |
| algoritmo de Euclides | Un método para hallar el máximo común divisor que divide el número mayor entre el menor y sustituye la pareja por el divisor y el resto, una y otra vez. El divisor del paso en que el resto llega a 0 es el MCD. Aparece en los «Elementos» de Euclides, hacia el siglo III a. C., y a menudo se dice que es el algoritmo más antiguo del mundo. |
| algoritmo de Euclides extendido | Un método para escribir el máximo común divisor en la forma \(a x_1 + b y_1\) sustituyendo hacia atrás, de abajo arriba, las igualdades de las divisiones del algoritmo de Euclides. Sirve para construir una solución particular de una ecuación diofántica lineal. |
| identidad de Bézout | El teorema que dice que siempre existen enteros \(x_1,\ y_1\) con \(a x_1 + b y_1 = \gcd(a,\ b)\). Lleva el nombre del matemático francés Bézout. Es la razón por la que se puede resolver una ecuación diofántica lineal. |
| primos entre sí (coprimos) | Dos números enteros son primos entre sí (o coprimos) cuando su máximo común divisor es 1. Por ejemplo, 3 y 4 son primos entre sí. \(\dfrac{a}{g}\) y \(\dfrac{b}{g}\) siempre son primos entre sí, y por eso las soluciones están igualmente espaciadas. |
| múltiplo | El número que se obtiene al multiplicar un entero por otro entero. Los múltiplos de \(10\) son \(\dots,\ -20,\ -10,\ 0,\ 10,\ 20,\ \dots\). El cero y los números negativos también cuentan como múltiplos. |
| resto | Lo que sobra cuando una división entera no es exacta. \(13 \div 5\) tiene cociente \(2\) y resto \(3\). El algoritmo de Euclides trabaja solo con estos restos. |
| cociente | En la división entera, el número entero de veces que cabe el divisor. En \(13 = 5 \times 2 + 3\), el cociente es \(2\). |
| punto de coordenadas enteras (punto reticular) | Un punto del plano cuyas coordenadas \(x\) e \(y\) son las dos números enteros, como las esquinas de los cuadros del papel cuadriculado. Las soluciones enteras de una ecuación diofántica lineal son exactamente los puntos de coordenadas enteras de la recta \(ax + by = c\). |
| parámetro | Una variable que puedes cambiar libremente y que sirve para escribir todo un conjunto de soluciones con una sola fórmula. En esta página, \(t\) es el parámetro. |
| coeficiente | El número que va delante de una letra. En \(3x\), el coeficiente es \(3\). Cuando no se escribe ningún número, como en \(x\), el coeficiente es 1. |
| inecuación | Una expresión que compara el tamaño de dos valores mediante una desigualdad, como \(t \geq 0\). Sirve para quedarse solo con las soluciones enteras positivas. También se llama desigualdad. |
Qué conviene saber de antemano
Esto es lo que te ayuda a usar el cálculo de esta página entendiendo lo que haces, y no solo pulsando el botón.
Si te atascas, volver a estos temas es el camino más rápido.
| División con resto (4.º–6.º de Primaria, 9-12 años) |
|
| Divisores, múltiplos y MCD (5.º–6.º de Primaria, 10-12 años) |
|
| Expresiones algebraicas y ecuaciones de primer grado (1.º–2.º de ESO, 12-14 años) |
|
| Ecuaciones lineales con dos incógnitas y sus gráficas (2.º de ESO, 13-14 años) |
|
| Inecuaciones (1.º–4.º de ESO, 12-16 años) |
|
| Operaciones con fracciones (5.º de Primaria–1.º de ESO, 10-13 años) |
|
Cómo calcularlo con Excel
| Coeficiente a de x | 50 |
| Coeficiente b de y | 80 |
| Constante c del segundo miembro | 1000 |
| MCD g | =M.C.D(B1;B2) |
| Resto de c ÷ g | =RESIDUO(B3;B4) |
| ¿Soluciones enteras? | =SI(B5=0;"Hay soluciones";"No hay soluciones") |
| Coeficiente a de x | 50 |
| Coeficiente b de y | 80 |
| x1 del algoritmo de Euclides | -3 |
| y1 del algoritmo de Euclides | 2 |
| a×x1 + b×y1 | =B1*B3+B2*B4 |
| MCD g | =M.C.D(B1;B2) |
| Coeficiente a de x | 50 |
| Coeficiente b de y | 80 |
| Constante c del segundo miembro | 1000 |
| MCD g | =M.C.D(B1;B2) |
| Solución particular x0 | 4 |
| Solución particular y0 | 10 |
| Entero t | 1 |
| x = x0 + (b/g)×t | =B5+(B2/B4)*B7 |
| y = y0 − (a/g)×t | =B6-(B1/B4)*B7 |
| Comprobación a×x + b×y | =B1*B8+B2*B9 |
| Coeficiente a de x | 50 |
| Coeficiente b de y | 80 |
| MCD g | =M.C.D(B1;B2) |
| Solución particular x0 | 4 |
| Solución particular y0 | 10 |
| Cota inferior de t (por x ≥ 1) | =-ENTERO((B4-1)/(B2/B3)) |
| Cota superior de t (por y ≥ 1) | =ENTERO((B5-1)/(B1/B3)) |
| Número de soluciones enteras positivas | =MAX(0;B7-B6+1) |
La primera tabla usa el ejemplo 50x + 80y = 1000. El MCD es 10, y 1000 ÷ 10 da resto 0, así que muestra «Hay soluciones». Cambia 1000 por 1001 y pasa a «No hay soluciones».
La segunda tabla comprueba que x1 = −3 e y1 = 2, hallados recorriendo hacia atrás el algoritmo de Euclides, cumplen de verdad la identidad de Bézout. 50×(−3) + 80×2 = 10, que coincide con el MCD.
La tercera tabla saca una solución de la solución general. Escribe 1 en t y obtienes x = 12 e y = 5, y la fila de comprobación vuelve a dar 1000. Prueba con otros enteros para t.
La cuarta tabla se queda con las soluciones enteras positivas. La cota inferior de t es 0 y la superior es 1, así que hay 2 soluciones enteras positivas (t = 0 y t = 1). Estas dos fórmulas valen cuando a y b son los dos positivos. Con un coeficiente negativo, el sentido de la inecuación se invierte, así que ten cuidado.
Cómo calcularlo con Hojas de cálculo de Google
| Coeficiente a de x | 50 |
| Coeficiente b de y | 80 |
| Constante c del segundo miembro | 1000 |
| MCD g | =M.C.D(B1;B2) |
| Resto de c ÷ g | =RESIDUO(B3;B4) |
| ¿Soluciones enteras? | =SI(B5=0;"Hay soluciones";"No hay soluciones") |
| Coeficiente a de x | 50 |
| Coeficiente b de y | 80 |
| x1 del algoritmo de Euclides | -3 |
| y1 del algoritmo de Euclides | 2 |
| a×x1 + b×y1 | =B1*B3+B2*B4 |
| MCD g | =M.C.D(B1;B2) |
| Coeficiente a de x | 50 |
| Coeficiente b de y | 80 |
| Constante c del segundo miembro | 1000 |
| MCD g | =M.C.D(B1;B2) |
| Solución particular x0 | 4 |
| Solución particular y0 | 10 |
| Entero t | 1 |
| x = x0 + (b/g)×t | =B5+(B2/B4)*B7 |
| y = y0 − (a/g)×t | =B6-(B1/B4)*B7 |
| Comprobación a×x + b×y | =B1*B8+B2*B9 |
| Coeficiente a de x | 50 |
| Coeficiente b de y | 80 |
| MCD g | =M.C.D(B1;B2) |
| Solución particular x0 | 4 |
| Solución particular y0 | 10 |
| Cota inferior de t (por x ≥ 1) | =-ENTERO((B4-1)/(B2/B3)) |
| Cota superior de t (por y ≥ 1) | =ENTERO((B5-1)/(B1/B3)) |
| Número de soluciones enteras positivas | =MAX(0;B7-B6+1) |
Cómo calcularlo con Python
from math import gcd
# coeficientes de ax + by = c (enteros)
a, b, c = 50, 80, 1000
def extended_gcd(x, y):
# algoritmo de Euclides extendido: devuelve el mcd y s, t con x*s + y*t = mcd
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} no es múltiplo de {g}, así que no hay soluciones enteras")
else:
_, s, t = extended_gcd(a, b)
x0, y0 = s * (c // g), t * (c // g) # solución particular (una solución entera)
step_x, step_y = b // g, a // g # paso de x y paso de y
# desplaza hasta que x sea el menor valor que es 0 o más, para una solución más fácil de leer
n = x0 // step_x
x0, y0 = x0 - n * step_x, y0 + n * step_y
print(f"Solución particular: (x, y) = ({x0}, {y0})")
print(f"Solución general: x = {x0} + {step_x}t, y = {y0} - {step_y}t (t es un entero cualquiera)")
for k in range(-2, 3):
print(f" t = {k:2}: (x, y) = ({x0 + step_x * k}, {y0 - step_y * k})")
# quédate solo con las soluciones enteras positivas (x >= 1 e y >= 1)
t_low = -((1 - x0) // -step_x)
t_high = (y0 - 1) // step_y
print("Soluciones enteras positivas:", [(x0 + step_x * k, y0 - step_y * k)
for k in range(t_low, t_high + 1)])
La fórmula en LaTeX y otras notaciones matemáticas (para copiar)
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, y₀ − (a/g)t ≥ 1
x_0 + \frac{b}{g} t \geq 1, \quad y_0 - \frac{a}{g} t \geq 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
Cómo pedirle a ChatGPT que haga el cálculo
Eres un asistente de cálculo para la teoría de números (propiedades de los números enteros). Haz el siguiente cálculo ejecutando realmente código de Python y basa tu respuesta únicamente en los números del resultado de la ejecución (no respondas con cálculo mental ni a ojo). Halla las soluciones enteras de la ecuación diofántica lineal 50x + 80y = 1000. Muestra cada uno de estos puntos: 1. El máximo común divisor de 50 y 80, y si 1000 es múltiplo de él 2. Los pasos de división del algoritmo de Euclides (hasta que el resto sea 0) y los x1, y1 con 50×x1 + 80×y1 = MCD que se obtienen recorriéndolos hacia atrás 3. Una solución particular (x0, y0) y la solución general x = x0 + (b/g)t, y = y0 − (a/g)t 4. Todas las soluciones enteras en las que x e y son las dos 1 o más En Python, usa math.gcd y el algoritmo de Euclides extendido para calcular con exactitud, y muestra las fórmulas que has usado y los números del resultado de la ejecución.
Cómo usar
-
1Introduce los númerosEscribe en los campos los números con los que quieres calcular
-
2CalculaHaz clic en el botón «Calcular»
-
3Consulta el resultadoEl resultado aparece al instante. En la misma página también encontrarás el desarrollo del cálculo y la explicación de la fórmula
Las ventajas de DataChef
Sin conocimientos técnicos: fácil e intuitivo
Sin necesidad de dar datos personales
Los archivos se borran automáticamente tras la descarga
Sin necesidad de atribución
Sin necesidad de pedir permiso