Resumen: aplicar el algoritmo de Euclides en el lenguaje C para obtener el máximo común divisor (MCD) de dos números; implementando dos funciones:
Si no sabes lo que es este término, mira la Wikipedia. El algoritmo es realmente sencillo y puede ser implementado en pocas líneas de código.
Con este ciclo simplemente operamos mientras que b sea distinto de 0.
Dentro del ciclo, guardamos el valor de b
en una variable temporal, después asignamos a b
el valor de a % b
que es sacar el residuo de dividir de manera entera a
entre b
.
int maximo_comun_divisor(int a, int b) {
int temporal;//Para no perder b
while (b != 0) {
temporal = b;
b = a % b;
a = temporal;
}
return a;
}
Finalmente, a
tomará el valor de temporal
, que era el que inicialmente tenía b
. En algún momento b
es 0 y se termina el ciclo, que es en donde regresamos a
, el cuál tendrá el último valor de b
antes de haber obtenido el residuo.
Como la definición dice que mcd(a,b)
es lo mismo que mcd(b, a % b)
podemos aplicar recursión o recursividad para llamar a la misma función dentro de sí misma, quedando así:
int maximo_comun_divisor_recursivo(int a, int b) {
if (b == 0) return a;
return maximo_comun_divisor_recursivo(b, a % b);
}
La condición de salida es que b
sea 0, lo cual pasará en algún momento pues en algún momento el residuo de a / b
será 0.
El código completo junto con una demostración de su uso queda así:
/**
* Máximo común divisor en C con el algoritmo de Euclides
* implementado con ciclo while y con recursión / recursividad
* @date 2019-12-18
* @author parzibyte
* @see https://parzibyte.me/blog
* */#include <stdio.h>
int maximo_comun_divisor(int a, int b) {
int temporal;//Para no perder b
while (b != 0) {
temporal = b;
b = a % b;
a = temporal;
}
return a;
}
int maximo_comun_divisor_recursivo(int a, int b) {
if (b == 0) return a;
return maximo_comun_divisor_recursivo(b, a % b);
}
int main(void) {
printf("MCD de 50 y 120: %d\n", maximo_comun_divisor(50, 120));
printf("MCD de 50 y 120 (recursivo): %d\n", maximo_comun_divisor_recursivo(50, 120));
printf("MCD de 7 y 5: %d\n", maximo_comun_divisor(7, 5));
printf("MCD de 7 y 5 (recursivo): %d\n", maximo_comun_divisor_recursivo(7, 5));
return 0;
}
Como se puede ver, ambos métodos funcionan para obtener el máximo común divisor en C, tanto el recursivo como el iterativo.
Recuerda que podrías almacenar el resultado en una variable. Por ejemplo:
int mcd = maximo_comun_divisor(50, 120);
También se pueden enviar variables:
int a = 50, b = 120; int mcd = maximo_comun_divisor(a, b);
Por otro lado, tanto a
y b
pueden ser proporcionadas por el usuario, y leídas por el programa usando scanf.
Te animo a leer más sobre C en mi blog.
Hoy te voy a presentar un creador de credenciales que acabo de programar y que…
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
En este artículo te voy a enseñar cómo usar un "top level await" esperando a…
Esta web usa cookies.