¿Es la prueba de primalidad Rabin-Miller más rápida que el tamiz de Eratóstenes?

Resuelven problemas diferentes pero relacionados. El SoE genera primos . La prueba de Miller-Rabin determina la compostura (que se puede convertir en determinar la primalidad o la primitiva probable).

Si puede amortizar algo de tiempo de inicio, tener algo de memoria y sus números no son demasiado grandes, entonces se puede ejecutar un tamiz una vez y dar respuestas rápidas a los números en su rango. Fuera del rango, solo estás haciendo una división de prueba, que es realmente lenta.

La prueba de primalidad más rápida para números de 32 bits más allá del rango pequeño (más de 500k más o menos) es una prueba de Miller-Rabin hash de base única. Es determinista y funciona mucho más rápido que la división de prueba con un tamiz. Para las entradas de 64 bits, existen bases MR deterministas que le dan una respuesta rápidamente. Tamizar aquí será dolorosamente lento en comparación. Una vez que supere los 64 bits, la división de prueba completa rápidamente se vuelve inútilmente lenta.

Por lo tanto, para responder a su primera pregunta, es útil cuando se realizan pruebas de primalidad únicas en entradas no pequeñas. Es especialmente útil para probables pruebas primarias de entradas grandes.

En cuanto al problema de hackerrank, el problema tiene dos partes: dado un rango, filtra los números primos y filtra los números cuyos dígitos son primos. Este último tiene algunos atajos interesantes (por ejemplo, hay rangos de entrada que no pueden dar ningún resultado). Sin embargo, la primera es una aplicación de tamiz clásica: queremos generar primos en un rango razonablemente pequeño. Podemos hacerlo con bastante facilidad y bastante rápido. Luego simplemente eliminamos los resultados que tienen dígitos prohibidos.

Podrías encontrar una forma inteligente de generar los números no prohibidos en el rango, que no es un número enorme y generalmente más pequeño que el número de primos, y luego prueba la primalidad de cada uno. Es una pregunta interesante.

A menudo necesitamos usar números primos que son mucho, mucho más grandes que 10 ^ 15.

Por ejemplo, el estándar para el cifrado RSA en estos días es elegir dos números primos con alrededor de 2048 bits cada uno. Eso es alrededor de 10 ^ 600 más o menos.

Para ese tipo de aplicación, necesitamos pruebas rápidas de primalidad como Miller-Rabin.

More Interesting

¿Por qué no puedo resolver la subsecuencia creciente más larga simplemente ordenando la secuencia y luego iterando a través de cada elemento asegurándome de que la secuencia siempre esté aumentando?

¿Cómo funciona el algoritmo de búsqueda de ciclo de Floyd? ¿De qué manera mover la tortuga al comienzo de la lista vinculada, mientras se mantiene a la liebre en el lugar de reunión, seguido de mover un paso a la vez, hace que se encuentren en el punto de inicio del ciclo?

¿Cuáles son algunos de los mejores algoritmos?

¿Hay algún algoritmo que sea más rápido que log (n)?

¿Cómo explicaría el Control de concurrencia de versiones múltiples en términos simples?

¿Es esta una función de clasificación de burbujas válida? Si es así, ¿entonces cómo?

¿Cuál es un buen algoritmo para interpolar datos de series temporales faltantes?

¿Es así como se elimina de un árbol de búsqueda binario cuando un padre tiene dos subárboles?

Si saco el bucle for más interno de un bucle for anidado y lo ejecuto solo, ¿cambiará la complejidad del tiempo?

¿Hay sitios web dedicados al aprendizaje de algoritmos y la teoría de los autómatas?

¿Cuál es el inverso matemático de 2 ^ N?

¿Cuáles son algunos de los algoritmos comunes y estrategias de diseño utilizados por los desarrolladores de juegos sin fin?

¿Qué tan bueno es quicksort y cadenas?

Cómo implementar el algoritmo

¿Cómo son útiles las conferencias sobre algoritmos de Ravindra Babu Ravula para las entrevistas en el campus?