Ejercicio 05 — Pide N e imprime todos los primos entre 2 y N
Dificultad: amarillo · Módulo 03 (Bucles)
Enunciado
Pide N e imprime todos los primos entre 2 y N
Cómo se resuelve
Listar los primos hasta N combina dos bucles anidados con break y estrena una joya de Python: el else del for.
for p in range(2, n + 1)— el bucle exterior recorre cada candidatopque podría ser primo.for d in range(2, int(p**0.5) + 1)— el bucle interior busca un divisor dep. Solo probamos hasta la raíz cuadrada (p**0.5) porque siptiene un divisor mayor que su raíz, forzosamente tiene otro menor que ya habríamos encontrado; esto ahorra muchísimas vueltas.if p % d == 0: break— siddivide ap(resto cero),pno es primo y cortamos el bucle interior conbreak: no tiene sentido seguir buscando más divisores.else:colgado delfor(no delif) — esteelsese ejecuta solo si el bucle interior terminó SIN toparse con unbreak, es decir, si no encontró ningún divisor. En ese casopes primo y lo imprimimos.
El for ... else no existe en C; allí necesitarías una bandera (bool es_primo = true;) que pones a false al hallar un divisor y consultas después del bucle. Python te da esa lógica de “el bucle terminó limpio” de forma directa.
Trampa habitual: creer que el else va con el if. Fíjate en la indentación: está alineado con el for interior, y su regla es “si no hubo break”.
Para practicar — cópialo y complétalo
Pega este esqueleto y completa los TODO. Es la mejor forma de aprender: inténtalo antes de mirar la solución.
# Curso de Python — Modulo 03: Bucles
# Ejercicio 05 — PRACTICA (rellena los TODO)
# Enunciado: Pide N e imprime todos los primos entre 2 y N
# Dificultad: amarillo
# Ejecutar: python3 ej05_practica.py
# TODO 1: Lee N desde teclado y conviertelo a entero.
n = None # reemplaza esto
# TODO 2: Bucle externo: recorre cada candidato p desde 2 hasta N inclusive.
for p in range(0): # ajusta los argumentos
# TODO 3: Bucle interno: recorre divisores d desde 2 hasta sqrt(p) inclusive.
# int(p**0.5) + 1 te da el limite superior correcto.
for d in range(0): # ajusta los argumentos
# TODO 4: Si d divide a p exactamente (p % d == 0), sal del bucle interno.
pass
# TODO 5: Usa el bloque "else" del bucle interno.
# Ese else se ejecuta SOLO si el for termino sin break,
# es decir, ningun divisor fue encontrado => p es primo.
# Imprime p en ese caso.
# else:
# passSolución — cópiala y ejecútala
# Curso de Python — Modulo 03: Bucles
# Ejercicio 05 — MODELO (resuelto)
# Enunciado: Pide N e imprime todos los primos entre 2 y N
# Dificultad: amarillo
# Ejecutar: python3 ej05_modelo.py
n = int(input("Hasta que numero buscar primos: "))
for p in range(2, n + 1):
# Comprueba si algun numero entre 2 y sqrt(p) divide a p
for d in range(2, int(p**0.5) + 1):
if p % d == 0:
break # encontramos un divisor: p no es primo
else:
# El for termino sin break => ningun divisor => p es primo
print(p)Cómo usarlo
Pega el código en un fichero y ejecútalo con tu toolchain habitual (o el botón de Ejecutar de tu editor). Antes de mirar la solución, intenta completar tú el esqueleto: es la mejor forma de aprender.