Por Nacho Cabanes
Nivel de dificultad aproximado (1 a 5): 1
El mínimo común múltiplo de varios números es el menor número que es múltiplo de todos ellos a la vez.
Por ejemplo, el mcm de 3 y 7 es 21, el de 4 y 12 es 12, y el de 9 y 12 es 36.
El usuario introducirá tres números enteros (positivos, de no más de 5 cifras), uno en cada línea. Tu programa debe mostrar el mínimo común múltiplo de esos tres números.
Cuidado: Como suele ocurrir en los retos de programación, hay que seguir exactamente las entradas y salidas (mira el ejemplo): NO es un programa interactivo, no debe avisar al usuario con frases como "Introduce un número" o "Dame un número". Sólo debe tomar tres datos numéricos enteros de la entrada estándar, analizarlos y mostrar un resultado que también será un número entero. Tampoco debe responder con nada similar a "Tu resultado es: ", ni comprobar si los números tienen menos de 6 cifras (esa información es para que escojas el tipo de datos adecuado). Del mismo modo, no debe existir ninguna pausa antes ni después de la ejecución del programa.
Entrada 1 3 7 2 Salida 1 42 Entrada 2 12 24 28 Salida 2 168 Entrada 3 12 24 48 Salida 3 48 Entrada 4 1234 1326 888 Salida 4 121085016 Entrada 5 12345 54321 55555 Salida 5 2483651996565
Original en: Recopilación de retos, Nacho Cabanes
// Reto 23: Minimo comun múltiplo de 3 números // Ejemplo de solucion en C, por Luis Landaeta, https://www.facebook.com/lalex21 // Nota del recopilador: debería usar "long", o puede fallar con números de 5 cifras // Por ejemplo, falla con 12345,54321,55555 // 29-Julio-2014 #include <stdio.h> #include <stdlib.h> int Mayor(x,y) { if(x>y) return x; else return y; } int main() { int x,y,z,mcm; scanf("%d",&x); scanf("%d",&y); scanf("%d",&z); mcm=Mayor(x,y); mcm=Mayor(mcm,z); while(mcm%x!=0||mcm%y!=0||mcm%z!=0) { mcm++; } printf("%d",mcm); return 0; }
*Reto 23: MCM de 3 numeros * *LENGUAJE: COBOL RM 74. * *Por Zhamel * *COMPILADO 11/03/2015. * *No probado por el recopilador * 000100 IDENTIFICATION DIVISION. 000200 PROGRAM-ID. MINCMUL. 000250 ENVIRONMENT DIVISION. 000300 DATA DIVISION. 000400 WORKING-STORAGE SECTION. 000500 01 WKS-NUMS. 000600 03 WKS-NUM-1 PIC 9(03)V9(03). 000700 03 WKS-NUM-2 PIC 9(03)V9(03). 000800 03 WKS-NUM-3 PIC 9(03)V9(03). 000900 01 WKS-CONTADOR PIC 9(03)V9(03). 001000 01 WKS-MAXIMO PIC 9(03)V9(03). 001100 01 WKS-RESTOS. 001200 03 WKS-RES-1 PIC 9(03)V9(03). 001300 03 WKS-RES-2 PIC 9(03)V9(03). 001400 03 WKS-RES-3 PIC 9(03)V9(03). 001500 01 WKS-VALOR PIC Z9(03).9(03). 001700 PROCEDURE DIVISION. 001800 INICIO. 001900*RECOJEMOS LOS NÚMEROS 002000 ACCEPT WKS-NUM-1. 002100 ACCEPT WKS-NUM-2. 002200 ACCEPT WKS-NUM-3. 002300*GUARDAMOS EL PRIMERO COMO MÁXIMO 002400 MOVE WKS-NUM-1 TO WKS-MAXIMO. 002500*SI MAXIMO ES MENOR A EL 2DO, CAMBIAMOS A MÁXIMO 002600*SI MAXIMO ES MENOR A EL 3RO, MÁXIMO ES EL 3RO 002700 IF WKS-MAXIMO < WKS-NUM-2 THEN 002800 MOVE WKS-NUM-2 TO WKS-MAXIMO. 002900 IF WKS-MAXIMO < WKS-NUM-3 THEN 003000 MOVE WKS-NUM-3 TO WKS-MAXIMO. 003100*INICIALIZAMOS EN DIFERENTE DE CERO 003200 MOVE 99 TO WKS-RES-1. 003300 MOVE 99 TO WKS-RES-2. 003400 MOVE 99 TO WKS-RES-3. 003500*AUMENTA DESDE 1 EN 1 HASTA QUE SUS RESIDUOS SEAN CERO 003600 PERFORM 10000-MCM-VARIANDO 003700 VARYING WKS-CONTADOR 003800 FROM 1 BY 1 003900 UNTIL WKS-RES-1 = 0 AND 004000 WKS-RES-2 = 0 AND 004100 WKS-RES-3 = 0. 004200 004250 004300 DISPLAY "EL MCM ES: " WKS-VALOR. 004400 004500 STOP RUN. 004600 004700 004800 10000-MCM-VARIANDO. 004900 ADD 1 TO WKS-CONTADOR. 005000 005100 DIVIDE WKS-NUM-1 INTO WKS-CONTADOR 005200 GIVING WKS-VALOR 005300 REMAINDER WKS-RES-1. 005400 005500 DIVIDE WKS-NUM-2 INTO WKS-CONTADOR 005600 GIVING WKS-VALOR 005700 REMAINDER WKS-RES-2. 005800 005900 DIVIDE WKS-NUM-3 INTO WKS-CONTADOR 006000 GIVING WKS-VALOR 006100 REMAINDER WKS-RES-3. 006300 MOVE WKS-CONTADOR TO WKS-VALOR
// Reto 23: Minimo comun múltiplo de 3 números // Ejemplo de solucion en C++, por Nacho Cabanes // Version simple, probando todos los posibles valores // Resultará muy lento con números de 5 cifras // 02-Junio-2014 #include <iostream> using namespace std; int main() { long n1, n2, n3; long maximo; long i; cin >> n1; cin >> n2; cin >> n3; // Como minimo, sera el mayor de los 3 maximo = n1; if ( n2 > maximo ) maximo = n2; if ( n3 > maximo ) maximo = n3; // Solo queda buscar a partir de ese valor i = maximo; while ((i % n1 != 0) || (i % n2 != 0) || (i % n3 != 0)) i++; cout << i << endl; return 0; }
// Reto 23: Minimo comun múltiplo de 3 números // Ejemplo de solucion en C++, por Leksa // 15-Ago-2016 #include <iostream> using namespace std; long mcd(int a,int b){ if(a%b==0) return b; else return mcd(b,a%b); } int main() { int a,b,c; cin >> a; cin >> b; cin >> c; long mcm = 0; mcm = (a*b) / mcd(a,b); long mcd3 = 0; mcd3 = (mcm*c) / mcd(mcm,c); cout << mcd3 << endl; return 0; }
// Reto 23: Minimo comun múltiplo de 3 números // Ejemplo de solucion en C++, por Cristian // 04-Oct-2016 #include <iostream> #include <cstdlib> using namespace std; int main() { long x,y,z,mcm,max,i; cin>>x; cin>>y; cin>>z; max = x; if(y>max) max = y; if(z>max) max = z; mcm = 1; i = 2; while (i< = max) { if(x%i = = 0 || y%i = = 0 || z%i = = 0) { if(x%i = = 0) x = x/i; if(y%i = = 0) y = y/i; if(z%i = = 0) z = z/i; mcm = mcm*i; i = 1; } if(x%i = = 0 || y%i = = 0 || z%i = = 0) { mcm = mcm*i; i = 1; } i++; } cout << mcm << endl; return 0; }
// Reto 23: Minimo comun múltiplo de 3 números // Ejemplo de solucion en C#, por Luis Alejandro Castrillón, http://www.ruixu.hol.es // Version simple, probando todos los posibles valores // Nota del recopilador: debería usar "long", o puede fallar con números de 5 cifras // Por ejemplo, falla con 12345,54321,55555 // 20-Julio-2014 using System; public class Reto023lvl1 { public static void Main() { int x, y, z; int mayor, nn; x = Convert.ToInt32(Console.ReadLine()); y = Convert.ToInt32(Console.ReadLine()); z = Convert.ToInt32(Console.ReadLine()); mayor=x; if (y>mayor) mayor=y; if (z>mayor) mayor=z; nn = mayor; while((nn%x!=0)||(nn%y!=0)||(nn%z!=0)) nn=nn+1; Console.WriteLine(nn); } }
// Reto 23: Minimo comun múltiplo de 3 números // Ejemplo de solucion en C#, por Miguel // Version ligeramente optimizada, probando los múltiplos del mayor // 26-Febrero-2015 using System; public class _mcmFino_ { public static void Main() { int a = 0; int b = 0; int c = 0; long i = 1; int mayor = 0; a = Convert.ToInt32(Console.ReadLine()); b = Convert.ToInt32(Console.ReadLine()); c = Convert.ToInt32(Console.ReadLine()); if (a>b) mayor = a; else mayor = b; if (c > mayor) mayor = c; while ((mayor*i) % b != 0 || (mayor * i) % c != 0 || (mayor * i) % a != 0) { i++; } Console.WriteLine(i*mayor); } }
// Reto 23: Minimo comun múltiplo de 3 números // Ejemplo de solucion en Java, por Nacho Cabanes // Version simple, probando todos los posibles valores // Resultará muy lento con números de 5 cifras // 02-Junio-2014 import java.util.Scanner; class Reto023 { public static void main(String [] args) { long n1, n2, n3; long maximo; long i; Scanner entrada = new Scanner(System.in); n1 = Long.parseLong(entrada.nextLine()); n2 = Long.parseLong(entrada.nextLine()); n3 = Long.parseLong(entrada.nextLine()); // Como minimo, sera el mayor de los 3 maximo = n1; if ( n2 > maximo ) maximo = n2; if ( n3 > maximo ) maximo = n3; // Solo queda buscar a partir de ese valor i = maximo; while ((i % n1 != 0) || (i % n2 != 0) || (i % n3 != 0)) i++; System.out.println( i ); } }
// Reto 23: Minimo comun múltiplo de 3 números // Ejemplo de solucion en Java, por Jonathan Felix, http://www.teidenstudios.com/ // 08-Sep-2015 import java.util.*; public class MCM02 { public static long mcm(int n1, int n2, int n3) { long aux1 = n1; long aux2 = n2; long aux3 = n3; while(!(aux1 == aux2 && aux2 == aux3)) { if(aux1 < aux2 || aux1 < aux3) aux1+=n1; else if(aux2 < aux1 || aux2 < aux3) aux2+=n2; else if(aux3 < aux1 || aux3 < aux2) aux3+=n3; } return aux1; } public static void main(String[] args) { Scanner leer = new Scanner(System.in); int n1 = leer.nextInt(); int n2 = leer.nextInt(); int n3 = leer.nextInt(); System.out.println(mcm(n1, n2, n3)); } }
PROGRAM Reto23; (* Programa que calcula el minimo común múltiplo de 3 enteros. Este programa es la solución al reto Nº 23 de la web: http://www.nachocabanes.com/retos/reto.php?n=023 Por José Antonio 17-Ene-2016 *) USES math; (*Cargamos la unidad math para poder usar la función "max"*) VAR numero1,numero2,numero3:Int64; mcm,multiplicador:Int64; (*Los números introducidos por el usuario son enteros de no más de 6 cifras, como el máximo integer en este compilador es de 2147483647 será suficiente. El valor máximo posible del m.c.m. será en el caso más desfavorable de 999994000010999994, para evitar overflow se usará un Int64 cuyo valor máximo posible es de 9223372036854775807*) BEGIN ReadLn(numero1); ReadLn(numero2); ReadLn(numero3); (*Lógicamente como mínimo el m.c.m será el máximo de los números introducidos por el usuario. Determinado este se irá multiplicando por numeros consecutivos empezando por el 1 hasta que se satisfaga la condición de que dicho producto sea divisible entre todos los valores introducidos por el usuario*) mcm:=max(numero1,numero2); mcm:=max(mcm,numero3); multiplicador:=1; REPEAT IF (multiplicador>1) THEN mcm:=mcm DIV(multiplicador-1); mcm:=mcm*multiplicador; multiplicador:=multiplicador+1; UNTIL ((mcm MOD numero1)=0) AND ((mcm MOD numero2)=0) AND ((mcm MOD numero3)=0); WriteLn(mcm); END.
# Reto 23: MCM de 3 numeros # Ejemplo de solucion en Python, por Jose Enrique marquez # 17-Marzo-2015 # Solución lenta, probando todos los valores posibles def mayor(a, b): if a > b: return a else: return b def main(): x = int(raw_input("")) y = int(raw_input("")) z = int(raw_input("")) mcm = mayor(x, y) mcm = mayor(mcm, y) while(mcm % x != 0 or mcm % y != 0 or mcm % z != 0): mcm += 1 print mcm if __name__ == "__main__": main()
# Reto 23: MCM de 3 numeros # Ejemplo de solucion en Python, por Kennet # 06-Feb-2017 #entrada a = input() b = input() c = input() # #mayor nro: def mcd (a,b): if a>b: may = a men = b else: may = b men = a # #algoritmo de euclides r = may%men q = may // men #print (q,r) while r != 0: may = men men = r r = may%men q = may // men #print (q,r) mcd = men mcm = a*b/mcd return (mcm) # # d = mcd(a,b) e = mcd(c,d) print e
# Reto 23: MCM de 3 numeros # Ejemplo de solucion en Python, por Oliver # 11-May-2015 # Solución lenta, probando todos los valores posibles def mcm(a,b,c): def mayor(a,b): if a<b : return b else: return a mcm=a if mcm<mayor(b,c):mcm=mayor(b,c) while mcm%a!=0 or mcm%b!=0 or mcm%c!=0 : mcm+=1 return mcm print mcm(int(raw_input()),int(raw_input()),int(raw_input()))
# Reto 23: Minimo comun múltiplo de 3 números # Ejemplo de solucion en Ruby, por iango # Version simple, probando todos los posibles valores # Resultará muy lento con números de 5 cifras # 11-Abr-2017 class MCM def initialize() end def lograr a = gets() b = gets() c = gets() a = a.to_i b = b.to_i c = c.to_i d = a if(b>d) d = b end if(c>d) d = c end w = 1 while((d%a!=0) or (d%b!=0) or (d%c!=0)) do w = 0 d += 1 end puts(d) end end cual = MCM.new cual.lograr
# Reto 23: Minimo comun múltiplo de 3 números # Ejemplo de solucion en Ruby # Version simple, probando todos los posibles valores # Resultará muy lento con números de 5 cifras # 05-May-2017 #Khristian Rodriguez #@kriss_cerdaa #variables n1 = gets().chomp.to_i n2 = gets().chomp.to_i n3 = gets().chomp.to_i maximo = n1 #Buscando el máximo if n2 > maximo maximo = n2 end if n3 > maximo maximo = n3 end i = maximo #While while i % n1 !=0 || i % n2 !=0 || i % n3 !=0 i+=1 end #Respuesta puts"#{i}"