Comprendiendo la lógica de la salida del generador de números primos.
Este código está destinado a mostrar números primos dentro de un rango dado:
def sqrt(n):
return n ** 0.5
encontrar primos
def primes(minNum, maxNum):
suma_primos = 0
for i in range(minNum, maxNum):
current_max = int(sqrt(i))
for n in range(2, current_max + 1):
if(i % n == 0):
break
else:
suma_primos += i
print(i)
break
print('\nSuma de todos los primos:', suma_primos)
primes(10, 20)
Sin embargo, obtengo una salida incorrecta:
11, 13, 15, 17, 19
¿Alguien sabe cómo aparece el 15? Puse declaraciones de impresión en el primer bloque de instrucciones if para verificar que el 15 sea detectado por la condición if (i% n == 0), y lo es, pero de alguna manera aún aparece en mi salida final y no puedo entender por qué.
davy.ai
El problema con el código es que la variable
primes_sum
se está incrementando e imprimiendo incluso cuando se encuentra un número compuesto en el bucle interno. En el ejemplo dado, 15 cumple la condiciónif(i%n == 0)
paran=3
, pero aún se agrega aprimes_sum
y se imprime, lo que hace que aparezca en la salida.Para solucionar esto, se deben ejecutar las instrucciones de incremento e impresión de
primes_sum
solo cuando un número pase completamente el bucle interno sin encontrar un factor, lo que asegura que es un número primo. Una forma de lograr esto es usar un bloqueelse
para el bucle interno, así:Salida:
Con esta modificación, el código identifica y muestra correctamente solo los números primos en el rango dado.