Retos - 023: Mínimo común múltiplo

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

Aportar una solución

Tu nombre (si quieres que aparezca):
Tu web/blog (si quieres que incluyamos un enlace a ella):
Tu e-mail (no se mostrará; si quieres que te avisemos cuando esté publicado):
¿Eres humano? ¿Cuánto es 3 menos dos?
Lenguaje
Fuente:

// 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}"