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
yb=11
, espero que la salida sea5 7 11
. En lugar de eso, la salida es6
.
davy.ai
Hay dos problemas que parecen estar causando una salida incorrecta:
return
en el bloqueif dividers == 1
debe estar fuera del buclefor
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.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:
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
yb = 11
, la salida ahora debería ser5 7 11
.