Podría hacer un SoE monolítico, asignando 10 ^ 12 bits y luego ejecutando todos los números primos hasta 1 millón marcando múltiples. Esto le proporciona una matriz de bits fácil de analizar que indica primos y compuestos. Podría comenzar a optimizarlo, como hacer ruedas: omitir múltiplos de 2; o múltiplos de 2 y 3 (un tamiz mod-6); o 2, 3 y 5 (un tamiz mod-30). Este último también tiene la ventaja de usar solo 1 byte por 30 números, por lo que usaría 33 GB en lugar de 125 GB de memoria. Para ejemplos de codificación en muchos idiomas, consulte https://rosettacode.org/wiki/Sie….
Esto funciona, pero no es terriblemente rápido en este tamaño y usa demasiada memoria. Es posible que desee mirar un tamiz segmentado, por ejemplo, un tamiz segmentado de Eratóstenes, que no solo funcionará mucho más rápido, sino que usará mucha menos memoria si puede renunciar a la idea de almacenarlos todos de una vez, y puede hacer su ” check ”en los primos en secuencia. Debería ejecutarse en 5–20 minutos en lugar de las múltiples horas que tomará el método monolítico.
No estoy seguro de si esto realmente ayuda, ya que “almacenar y verificar” es algo vago. Por ejemplo, ¿se trata de almacenamiento, validación, ejecución de un programa o invocación de una función, programación (¿qué parte?), Etc.
- Cómo contar en binario
- Cómo escribir una matriz de distancia para el algoritmo Bellman Ford
- ¿Existe un algoritmo borroso que replica la miopía?
- ¿Cuál es la diferencia entre los siguientes dos fragmentos de código?
- ¿Puede la búsqueda de profundización iterativa encontrar una solución más rápida que A * en algunos casos?