Cómo almacenar y verificar números primos menores que 10 ^ 12 con el algoritmo sieve ()

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.

Aquí tienes

Tamiz de Eratóstenes – GeeksforGeeks

Obtenga una memoria de un terabit. 128 GB de memoria flash serán suficientes.

Establezca todos los bits en 1. Luego configure cada uno de los bits en 1, luego cada tercer bit en 1. Solo necesita hacer esto 1,000,000 de veces. Lo que te queda es un conjunto de 0 y 1 que te dan los primeros trillones de primos.