es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Números primos en una función

Ayúdame por favor.

Escribe una función: El usuario introduce números naturales A y B (A<B). La función imprime todos los números primos separados por un espacio en el intervalo [A, B]

Este es mi código pero no funciona, da una salida incorrecta, no entiendo por qué?

def prime_numbers(a, b):
   for i in range(a, b + 1):
      dividers = 0
      for j in range (2, i):
         if i % j == 0:
             dividers += 1

     if dividers == 1:
         return i

a = int(input("Introduce el primer número: "))
b = int(input("Introduce el segundo número: "))
print(prime_numbers(a, b))

Cuando se ejecuta este código por ejemplo con a=5 y b=11, espero que la salida sea 5 7 11. En lugar de eso, la salida es 6.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Hay dos problemas que parecen estar causando una salida incorrecta:

    1. La instrucción return en el bloque if dividers == 1 debe estar fuera del bucle for que verifica todos los divisores posibles. De lo contrario, devuelve el número tan pronto como encuentra un divisor, sin verificar el resto de ellos. Esto significa que la función deja de comprobar el número actual después de encontrar el primer divisor, lo cual es incorrecto.
    2. La implementación actual no incluye 2 como número primo, aunque lo es. Esto se debe a que el segundo bucle for comienza en 2 (exclusivo), por lo que se salta 2. Para solucionar esto, puede comenzar el bucle en 2 (inclusive) en su lugar.

    Aquí está el código corregido:

    def prime_numbers(a, b):
        for i in range(a, b + 1):
            dividers = 0
            for j in range(2, i):
                if i % j == 0:
                    dividers += 1
    
            if dividers == 0:
                print(i, end=' ')
        print()
    
    a = int(input("Introduzca el primer número: "))
    b = int(input("Introduzca el segundo número: "))
    prime_numbers(a, b)
    

    En esta versión, la función imprime los números primos directamente en lugar de devolverlos, y también agrega un separador de espacio entre ellos. El print() al final se utiliza para agregar una nueva línea después de la salida.

    Cuando a = 5 y b = 11, la salida ahora debería ser 5 7 11.

Comments are closed.