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. 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 2 más 3?
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 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: 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()