En bastantes problemas no encontramos con la necesidad de calcular este valor, el MCD sobre todo se usa en criptografía.
Para el MCD de dos números se no enseña en la escuela que hay que descomponerlos en factores primos y el producto de los factores comunes es el valor del MCD, por ejemplo el MCD de 48 y de 60, su descomposición en factores primos es :
- Para 60 es 2^2 x 5 x 3
- Para 48 es 2^4 x 3
Es el MCD es 2^2 x 3 = 12
Hay otro método menos costoso computacionalmente que es el siguiente:
- Se divide el mayor (dividendo) entre el menor(divisor), si el resto es 0 el MCD es el valor menor
- En caso contrario se divide el divisor entre el resto en un proceso iterativo, en el que se actualizan los valores en cada operación, finaliza cuando el resto es 0, en este caso el MCD es el último divisor usado.
En este enlace se explica de forma gráfica y fácil
Para el cálculo del mínimo común múltiplo la operación es sencilla
mcm=(numero1 x numero2)/MCD(numero1,numero2)
A continuación os pongo un código en Java, que he probado en bastantes casos y no me ha dado error, pero que hay que sestearlos más.
// cálculo de Máxomo común divisor y el mínimo común múltiplo
import java.util.Scanner;
import java.lang.Math;
public class MCD_mcm {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
long numero1;
long numero2;
long resto;
long mayor;
long menor;
// entrada de datos
System.out.println("Introducir el numero 1 ");
numero1=sc.nextLong();
System.out.println("Introducir el mumero 2 ");
numero2=sc.nextLong();
// ordenacion de los numeros
if(numero1>=numero2){
mayor=numero1;
menor=numero2;
}
else{
mayor=numero2;
menor=numero1;
}
// cálculos
resto=mayor % menor; // cálculo del resto
System.out.println("Valor del resto "+resto);
while(resto!=0){
mayor=menor;
menor=resto;
resto=mayor%menor;
}
//Salida del Máximo Común divisor MCD
System.out.printf("El MCD de %d y %d es %d%n",numero1,numero2,menor);
/ calculo de mínimo común multiplo mcm
System.out.printf("El mcm de %d y %d es %d%n",numero1,numero2,Math.abs(numero1*numero2)/menor);
sc.close(); // cerramos el Scanner
}
}
No hay comentarios:
Publicar un comentario