Primo 10001

Cargando Python...

Los primeros seis números primos son: 2, 3, 5, 7, 11 y 13.

El 6º primo es 13.

¿Cuál es el primo número 10.001?

¿Qué es un número primo?

Un número primo es aquel que solo es divisible por 1 y por sí mismo. El 1 no se considera primo.

2
3
5
7
11
13
17
19
23
10º 29

¿Cómo verificar si n es primo?

1

Si n < 2, no es primo

Por definición, 0, 1 y negativos no son primos

2

Buscar divisores entre 2 y n-1

Si encontramos alguno, n no es primo

3

Optimización: solo hasta √n

Si n tiene un divisor > √n, también tiene uno < √n

Si d divide a n y d > √n → n/d < √n
Solo necesitamos probar divisores hasta √n

Conceptos clave

💜 Primos ➗ Divisibilidad √ Raíz cuadrada 🔢 Conteo

La estrategia

Contar primos uno a uno hasta llegar al 10.001º. Para cada número, verificamos si es primo.

Optimización básica: Después del 2, solo los impares pueden ser primos. Ahorramos la mitad de las comprobaciones.

Variante A: while True + break

Bucle infinito que rompe cuando encontramos el primo 10.001.

Python
Pulsa "Ejecutar" para ver el resultado

Variante B: while con condición

La condición de salida va en el while.

Python
Pulsa "Ejecutar" para ver el resultado

Variante C: saltando pares

Contamos el 2 aparte y luego solo probamos impares.

Python
Pulsa "Ejecutar" para ver el resultado

¿Cuál elegir?

Variante Candidatos probados Ventaja
A: while True ~104.743 Explícita
B: while condición ~104.743 Sin break
C: solo impares ~52.372 2× más rápida
Resultado (las tres variantes) 104743

Conceptos clave

1

i * i <= n

Equivale a i <= √n pero sin calcular raíz (más rápido).

2

int(n**0.5) + 1

n**0.5 es √n. int() trunca. +1 incluye el límite.

3

range(3, limit, 2)

El tercer argumento es el paso. 2 genera 3, 5, 7, 9... (solo impares).

4

return True/False

La función devuelve un booleano. Podemos usarlo directamente en if.

Conceptos de Python aprendidos

🎯 Funciones con return ✓ Booleanos 🔢 range con paso ** Exponenciación

Generador infinito de primos

Creamos un generador que produce primos indefinidamente. Luego tomamos el 10.001º.

Python
Pulsa "Ejecutar" para ver el resultado

Desglose

1

all(n % i != 0 for i in ...)

all() devuelve True si todas las condiciones son verdaderas. Verifica que ningún i divide a n.

2

yield

Convierte la función en generador. Produce un valor y pausa hasta que se pida el siguiente.

3

islice(gen, 10000, 10001)

De itertools. Toma elementos del índice 10000 al 10001 (solo uno).

4

next(...)

Obtiene el siguiente elemento del iterador. Como islice da uno solo, ese es nuestro resultado.

Resultado 104743

Conceptos aprendidos

🌊 yield (generadores) ✓ all() 🔧 itertools.islice ➡️ next()

Criba de Eratóstenes

Para encontrar muchos primos, es más eficiente generar todos los primos hasta un límite con la Criba de Eratóstenes.

Visualización: primos hasta 50

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50

Tachamos múltiplos de 2, luego de 3, de 5... Los que quedan son primos.

?

¿Hasta dónde buscar?

El primo 10.001º es ~104.743. Usamos 150.000 como límite seguro (por el teorema de los números primos).

Python
Pulsa "Ejecutar" para ver el resultado

Comparativa de rendimiento

Método Para 10.001 primos Complejidad
Probar cada n ~1.5 segundos O(n√p)
Criba ~0.02 segundos O(n log log n)
Probar cada n ~1.5 segundos
Criba de Eratóstenes ~0.02 segundos
Resultado 104743

Conceptos aprendidos

🔢 Criba de Eratóstenes 📋 Listas booleanas ⚡ O(n log log n) 🎯 List comprehension

Prueba con otro índice

Primo nº