Python - CALCULAR EL MCD DE TRES NUMEROS EN PYTHON

 
Vista:

CALCULAR EL MCD DE TRES NUMEROS EN PYTHON

Publicado por andrea (1 intervención) el 05/05/2015 01:46:05
Hola necesito ayuda con este ejercicio:

"Haz un programa que calcule el macimo comun divisor (mcd) de tres enteros positivos. El mcd de tres numeros es el numero mas grande que divide exactamente a los tres."

He probado de varias formas pero no me da. Espero que puedan ayudarme. Gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

CALCULAR EL MCD DE TRES NUMEROS EN PYTHON

Publicado por 12-trunks-12 (37 intervenciones) el 05/05/2015 19:24:05
Se me ocurre ir restando uno desde el número más pequeña hasta que aparezca:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
numero1 = int(input("Número 1: "))
numero2 = int(input("Número 2: "))
numero3 = int(input("Número 3: "))
 
if numero1 < numero2 and numero1 < numero3:
    mcd = numero1
elif numero2 < numero1 and numero2 < numero3:
    mcd = numero2
else:
    mcd = numero3
while True:
    if numero1%mcd == 0 and numero2%mcd == 0 and numero3%mcd == 0:
        print("El mcd es", mcd)
        break
    else:
         mcd -= 1

Seguro que hay alguna manera de simplificar mi código pero no se me ocurre ahora mismo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

CALCULAR EL MCD DE TRES NUMEROS EN PYTHON

Publicado por dayana (1 intervención) el 30/11/2018 23:17:28
y como le haria para 4 numeros
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de abzer0x
Val: 373
Bronce
Ha disminuido 1 puesto en Python (en relación al último mes)
Gráfica de Python

CALCULAR EL MCD DE TRES NUMEROS EN PYTHON

Publicado por abzer0x (91 intervenciones) el 02/12/2018 06:51:23
Hola, para realizar el calculo de MCD (Máximo Común Divisor) existe varias formas, una de ellas es descomponiendo en factores primos cada uno de los número y luego fijarse en aquellos factores en común. Aunque esta forma función, no es eficiente para números muy grandes. Por lo que en este caso podemos recurrir al algoritmo de Euclides el cual es mucho más eficiente.
Una forma fácil de implementarlo en Python es la siguiente
1
2
3
4
5
6
def mcd(a, b):
    """ Esta función calcula el MCD (Máximo Común Divisor)
        de dos números utilizando el algoritmo de Euclides.
    """
    r = a % b if b != 0 else a
    return b if r == 0 else mcd(b, r)

Ahora si queremos usar la función anterior debemos simplemente pasarle dos números enteros, Ejemplo:
1
print(mcd(12, 20)) # 4

Si quieres calcular el MCD de varios números podemos usar la siguiente función:
1
2
3
4
5
6
7
8
9
10
11
def f(numbers):
    if len(numbers) >= 2:
        r = mcd(numbers[0], numbers[1])
        for n in numbers[2:]:
            r = mcd(r, n)
        return r
 
numbers = [12, 20, 38]
# Llamo a la función - fiajte que le estoy pasando una lista de enteros
result = f(numbers)
print(result) #2

También podemos usar la función reduce del modulo functools de Python.
1
2
3
4
5
6
7
8
# Importo el modulo
import functools
...
...
...
numbers = [12, 20, 38]
result = functools.reduce(lambda a, b: mcd(a, b), numbers)
print(result) #2

Código completo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
def mcd(a, b):
    """ Esta función calcula el MCD (Máximo Común Divisor)
        de dos números utilizando el algoritmo de Euclides.
    """
    r = a % b if b != 0 else a
    return b if r == 0 else mcd(b, r)
 
 
def f(numbers):
    if len(numbers) >= 2:
        r = mcd(numbers[0], numbers[1])
        for n in numbers[2:]:
            r = mcd(r, n)
        return r
 
numbers = []
i = 1
# Solicito los números
# En esta caso solicito 4 números si quieres más o menos debes cambiar el número
# 4 por otro o definir una variable y hacerlo de forma dinámica.
while i <= 4:
    try:
        num = int(input("Ingresa el número {}: ".format(i)))
        numbers.append(num)
        i += 1
    except ValueError as e:
        print("El valor ingresado no es un entero valido")
 
# Llamo a la función
result = f(numbers)
print(result)

Nos comentas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

CALCULAR EL MCD DE TRES NUMEROS EN PYTHON

Publicado por javi (1 intervención) el 14/12/2019 14:26:27
para que sirve el 2: en el "for n in numbers[2:]"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

CALCULAR EL MCD DE TRES NUMEROS EN PYTHON

Publicado por Anonymous (1 intervención) el 20/06/2019 01:17:35
Your code is fine but I have improved it since it gave division by zero and to perfect it, I had to add a try and an exception to let me know what was the code failure here I leave the code corrected.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
num1 = int(input('Giv me the first number: '))
num2 = int(input('Giv me the second number: '))
num3 = int(input('Giv me the third number: '))
 
try:
	if num1 < num2 and num1 < num3:
		mcd = num1
	elif num2 < num1 and num2 < num3:
		mcd = num2
	else:
		mcd = num3
 
	while True:
		if num1%mcd==0 and num2%mcd==0 and num3%mcd==0:
			print('The mcd is',mcd)
			break
 
		else:
			mcd -= 1
except ZeroDivisionError:
	print('There was an error when dividing by 0.')
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

CALCULAR EL MCD DE TRES NUMEROS EN PYTHON

Publicado por Neo (1 intervención) el 15/07/2019 05:06:09
interesantes las soluciones , bien este es mi aporte ...
si coges uno de los numeros y los disgregas en sus factores primos obteniendo tambien su potencia puedes usar funcion , while , for ya es segun tu conveniencia , luego tanto sus potencias como sus exponentes los metes un par de listas respectivamente para luego usar 2 For uno q controla las potencias y el otro los exponentes para luego compararlos y fin obtenies el MCD de estos , asi podrias meter cualquier cantidad de numeros q te de la gana :v

:)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar