¿Cómo lo puedo hacer más eficiente?

Iniciado por reconFito, 19 Diciembre 2019, 09:02 AM

0 Miembros y 1 Visitante están viendo este tema.

reconFito

Siento que sea algo extenso, si alguno me diera alguna idea de como hacerlo más eficiente se aceptan sugerencias.Gracias

Código (python) [Seleccionar]

# Ejercicio#129 Máximo común divisor

    # Lista que contendra los valores divisores == 0
    # para luego de esta lista sacar el maximo de todos.
    maximo_divisor = []

    # Pedir datos al usuario
    a = int(input("Digita el primer dato: "))
    b = int(input("Digita el segundo dato: "))
    if 0 > (a or b):
        print("Error al interpretar")
    else:
        if a < b:
            for i in range(1,a+1):
                divisor_a = a%i
                divisor_b = b%i
                # print(divisor_a, divisor_b)
                if divisor_a != 0 and divisor_b != 0:
                    print(f"El numero {i} no es divisor de {a}")
                else:
                    if divisor_a == 0 and divisor_b == 0:
                        print(f"El número {i} es divisor de {a}")
                        if divisor_a == 0:
                            maximo_divisor.append(i)               
        else:
            for i in range(1,b+1):
                divisor_a = a%i
                divisor_b = b%i
                # print(divisor_a, divisor_b)
                if divisor_a != 0 and divisor_b != 0:
                    print(f"El numero {i} no es divisor de {b}")
                else:
                    if divisor_a == 0 and divisor_b == 0:
                        print(f"El número {i} es divisor de {b}")
                        if divisor_b == 0:
                            maximo_divisor.append(i)
        print()
        print("El maxio común divisor es => {}".format(max(maximo_divisor)))

engel lex

#1
hey! cuidado con los operadores

Código (python) [Seleccionar]
if 0 > (a or b):

le estás diciendo "aplica or entre a y b, luego ver si ese resultado es menor que 0"

es decir si le das a=3 y b=10,  el verá si 11 es menor que 0

lo que queres es

Código (python) [Seleccionar]
if 0 > a or 0 > b:

para evitar repetir todo el codigo usa 2 variables extras

menor y mayor

Código (python) [Seleccionar]
if a==b: print("nope...")
menor = a if a<b else b
mayor = a if a>b else b


el maximo divisor no requiere ser un array, puede ser un entero...

el resto de optimización es matematica...

-revisar si el menor es divisor del mayor, en ese caso termina ahí
-el maximo divisor de un numero jamas será mayor a su mitad
-empezar por el numero mas alto (que es la mitad de el numero menor si es par)
etc...
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

tincopasan

hola, en python una de las múltiples posibilidades.
Código (python) [Seleccionar]

#-*- coding: utf -8 -*-

num1 = int(input("Digita el primer dato:"))
num2 = int(input("Digita el segundo dato: "))

a = max(num1, num2)
b = min(num1, num2)

while b!=0:
    res = b
    b = a%b
    a = res

print('El M.C.D. entre {0} y {1} es: {2}'.format(num1, num2, res))




Saludos