¿Alguien puede ayudarme a encontrar el máximo divisor común entre dos enteros en Java?

Puede encontrar el Máximo Divisor Común (mcd) de dos enteros utilizando la función Java biginteger. La clase Java biginteger tiene una función incorporada llamada gcd (.., ..). Simplemente puede crear una función que obtendrá dos números enteros de usted y le devolverá el mcd de los números dados. Pero dentro de la función, el trabajo lo realiza la clase java biginteger. Aquí hay una muestra:

private static int gcdThing (int a, int b) {
BigInteger b1 = BigInteger.valueOf (a);
BigInteger b2 = BigInteger.valueOf (b);
BigInteger gcd = b1.gcd (b2);
return gcd.intValue ();
}

Para más detalles lea esta publicación – Java: obtenga el máximo divisor común

Y la otra forma es que puede calcular el valor de mcd utilizando algunos conocimientos de teoría de números. Para este conocimiento, por favor eche un vistazo a esto – Máximo común divisor | Wikiwand.

Puedo describir su algoritmo en el código que proporciona de la siguiente manera:

  • Empieza reuniendo todos los divisores del primer número en su primer bucle y guárdelo en una matriz.
  • Luego se te ocurren todos los divisores del segundo número en tu segundo bucle y también lo guardas en otra matriz.
  • Luego compara el contenido de las dos matrices y extrae el mayor número que existe en ambas matrices.

Tu pensamiento está muy bien estructurado. Sin embargo, aquí tienes un par de problemas. El primer problema es la inicialización de sus matrices. ¡Estás inicializando la matriz cada vez que encuentras un divisor! En realidad, parece que no está almacenando nada en sus matrices. ¡Otro problema es que las matrices deben inicializarse con un tamaño estático mientras que su implementación requiere una dinámica! aún puede optimizar esta implementación simplemente usando otra estructura de datos como la lista vinculada o la lista de matriz; si estas dos palabras le parecen extrañas, simplemente ignórelas. si no tienes otra opción. Sin embargo, ¡probémoslo!

Tratemos de llegar a un algoritmo un poco diferente, pero aún tiene muchas similitudes con el suyo. ¿Por qué no ejecutamos un solo bucle for y en ese bucle vamos a verificar si hay dos divisores iguales y luego guardamos su valor en una sola variable, eliminando el uso de matrices? nuestro nuevo ciclo comenzaría desde 1 y finalizará cuando sea igual al mínimo de los dos números que se le dan porque sabemos, con seguridad, que el máximo común divisor de dos números no es mayor que uno de ellos. Aquí hay un método de Java para encontrar el mcd como acordamos, asociado con el método principal de Java para llamarlo:

public static void main (String [] args) {
System.out.println (mcd (12,8));
}

public static int gcd (int num1, int num2) {
int mcd = 1;
int mínimo = Math.min (num1, num2);
para (int i = 1; i <= mínimo; i ++) {
if (num1% i == 0 && num2% i == 0)
mcd = i;
}
devolver gcd;

}

Esta solución parece ser más conveniente y elegante, ¿no?

Por otra parte, y para leer más, hay un algoritmo un poco avanzado para resolver tales problemas. Se llama algoritmo euclidiano . Lleva el nombre de Euclides, un matemático griego . El algoritmo usa el concepto de recursión para resolver el problema. Puedes buscarlo en la web. Pero no tienes que comprenderlo.

Tengo el código listo, lo hago antes de 2 años, creo

https://www.dropbox.com/s/57i3dm

¿Solo necesitas saber el mcd? Porque si es así, una matriz es exagerada en mi opinión.

Existen 2 algoritmos famosos para este problema llamados algoritmo binario gcd y algoritmo euclidiano gcd.

Si busca en Wikipedia bcd y bcd euclidiano, debe encontrar información sobre ambos.

Sin embargo, el profesor podría querer que desarrolle su propio algoritmo.

¿Testnum1% 1 siempre es igual a 0 al igual que testnum2% 1 también siempre sería igual a 0? No estoy seguro porque nunca intenté usar el operador de módulo en un número decimal.