Summation of Primes
La suma de los primos menores que 10 es 2 + 3 + 5 + 7 = 17. Encuentra la suma de todos los primos menores que 2,000,000.
1 Entendiendo el Problema
Debemos sumar todos los números primos menores que 2 millones. Un número primo solo es divisible por 1 y por sí mismo.
Ejemplo: Primos menores que 30
Suma = 2 + 3 + 5 + 7 + 11 + 13 + 17 + 19 + 23 + 29 = 129
2 Fuerza Bruta - 3 Variantes
Probamos cada número y verificamos si es primo mediante división por prueba.
Variante A: while True + break
Test de primalidad básico con break.
Variante B: while condición
Condiciones directas en el while.
Variante C: for range
Usando for con range y optimización √n.
Análisis de complejidad
n números × √n divisiones cada uno
Solo variables auxiliares
⚠️ Para n = 2,000,000 esto es muy lento (~minutos). Necesitamos la Criba de Eratóstenes.
3 Enfoque Pythónico
Usando generadores, filter, y comprensiones con la criba básica.
Herramientas usadas
is_prime[i*i::i]— Slice con paso para marcar múltiplosenumerate()— Índices y valoressum(generator)— Suma perezosa- List comprehension con filtro
El truco del slice
# Marcar múltiplos de 3 desde 9:
# arr[9::3] = [False] * count
# Es equivalente a:
for j in range(9, n, 3):
arr[j] = False
4 Criba de Eratóstenes Optimizada
La Criba de Eratóstenes es el algoritmo clásico para encontrar todos los primos hasta n. Optimizamos memoria usando solo impares.
Visualización: Criba hasta 100
Comparación de rendimiento
| Método | Complejidad | Tiempo (n=2M) |
|---|---|---|
| Trial division | O(n√n) | ~30 segundos |
| Criba básica | O(n log log n) | ~50 ms |
| Criba optimizada (solo impares) | O(n log log n) | ~25 ms |
Eratóstenes de Cirene (276-194 a.C.)
Matemático, geógrafo y astrónomo griego. Además de la criba, calculó la circunferencia de la Tierra con notable precisión midiendo sombras en Alejandría y Siena. Su método para encontrar primos sigue siendo uno de los más eficientes para rangos pequeños-medianos.