elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  ¿Cómo lo puedo hacer más eficiente?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Cómo lo puedo hacer más eficiente?  (Leído 828 veces)
reconFito

Desconectado Desconectado

Mensajes: 27


Ver Perfil
¿Cómo lo puedo hacer más eficiente?
« en: 19 Diciembre 2019, 09:02 am »

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

Código
  1. # Ejercicio#129 Máximo común divisor
  2.  
  3.    # Lista que contendra los valores divisores == 0
  4.    # para luego de esta lista sacar el maximo de todos.
  5.    maximo_divisor = []
  6.  
  7.    # Pedir datos al usuario
  8.    a = int(input("Digita el primer dato: "))
  9.    b = int(input("Digita el segundo dato: "))
  10.    if 0 > (a or b):
  11.        print("Error al interpretar")
  12.    else:
  13.        if a < b:
  14.            for i in range(1,a+1):
  15.                divisor_a = a%i
  16.                divisor_b = b%i
  17.                # print(divisor_a, divisor_b)
  18.                if divisor_a != 0 and divisor_b != 0:
  19.                    print(f"El numero {i} no es divisor de {a}")
  20.                else:
  21.                    if divisor_a == 0 and divisor_b == 0:
  22.                        print(f"El número {i} es divisor de {a}")
  23.                        if divisor_a == 0:
  24.                            maximo_divisor.append(i)              
  25.        else:
  26.            for i in range(1,b+1):
  27.                divisor_a = a%i
  28.                divisor_b = b%i
  29.                # print(divisor_a, divisor_b)
  30.                if divisor_a != 0 and divisor_b != 0:
  31.                    print(f"El numero {i} no es divisor de {b}")
  32.                else:
  33.                    if divisor_a == 0 and divisor_b == 0:
  34.                        print(f"El número {i} es divisor de {b}")
  35.                        if divisor_b == 0:
  36.                            maximo_divisor.append(i)
  37.        print()
  38.        print("El maxio común divisor es => {}".format(max(maximo_divisor)))
  39.  


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.394



Ver Perfil
Re: ¿Cómo lo puedo hacer más eficiente?
« Respuesta #1 en: 19 Diciembre 2019, 15:40 pm »

hey! cuidado con los operadores

Código
  1. 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
  1. if 0 > a or 0 > b:

para evitar repetir todo el codigo usa 2 variables extras

menor y mayor

Código
  1. if a==b: print("nope...")
  2. menor = a if a<b else b
  3. 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...


« Última modificación: 19 Diciembre 2019, 15:43 pm por engel lex » En línea

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


Desconectado Desconectado

Mensajes: 1.279

No es lo mismo conocer el camino que recorrerlo.


Ver Perfil
Re: ¿Cómo lo puedo hacer más eficiente?
« Respuesta #2 en: 19 Diciembre 2019, 20:43 pm »

hola, en python una de las múltiples posibilidades.
Código
  1. #-*- coding: utf -8 -*-
  2.  
  3. num1 = int(input("Digita el primer dato:"))
  4. num2 = int(input("Digita el segundo dato: "))
  5.  
  6. a = max(num1, num2)
  7. b = min(num1, num2)
  8.  
  9. while b!=0:
  10.    res = b
  11.    b = a%b
  12.    a = res
  13.  
  14. print('El M.C.D. entre {0} y {1} es: {2}'.format(num1, num2, res))
  15.  
  16.  
  17.  

Saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines