La prueba de primalidad de Fermat es una prueba probabilística para determinar si un número es un primo probable .
Concepto
El pequeño teorema de Fermat establece que si p es primo y a no es divisible por p , entonces
Si se quiere comprobar si p es primo, se pueden elegir enteros aleatorios a no divisibles por p y ver si se cumple la congruencia. Si no se cumple para un valor de a , entonces p es compuesto. Es improbable que esta congruencia se cumpla para un a aleatorio si p es compuesto. [ 1 ] Por lo tanto, si la igualdad se cumple para uno o más valores de a , entonces decimos que p es probablemente primo .
Sin embargo, tenga en cuenta que la congruencia anterior se cumple trivialmente para, porque la relación de congruencia es compatible con la exponenciación . También se cumple trivialmente paraSi p es impar, por la misma razón. Por eso, normalmente se elige un valor aleatorio a en el intervalo.
Cualquiera de tal tipo que
Cuando n es compuesto, se le conoce como mentiroso de Fermat . En este caso, n se llama pseudoprimo de Fermat en base a .
Si elegimos un a tal que
entonces a se conoce como un testigo de Fermat para la composición de n .
Ejemplo
Supongamos que queremos determinar si n = 221 es primo. Elegimos aleatoriamente 1 < a < 220, digamos a = 38. Verificamos la congruencia anterior y encontramos que se cumple:
O bien 221 es primo, o bien 38 es un mentiroso de Fermat, así que tomamos otro a , digamos 24:
Por lo tanto, 221 es compuesto y 38 era, en efecto, un mentiroso de Fermat. Además, 24 es un testigo de Fermat de la composición de 221.
Algoritmo
El algoritmo se puede escribir de la siguiente manera:
- Entradas : n : un valor para probar la primalidad, n > 3; k : un parámetro que determina el número de veces que se prueba la primalidad.
- Salida : compuesto si n es compuesto, de lo contrario probablemente primo
- Repetir k veces:
- Elige un número al azar en el rango [2, n − 2].
- Si, luego devolver compuesto
- Si nunca se devuelve compuesto: devolver probablemente primo
Los valores de a 1 y n − 1 no se utilizan ya que la igualdad se cumple para todos los n y todos los n impares respectivamente, por lo que probarlos no añade ningún valor.
Complejidad
Utilizando algoritmos rápidos para la exponenciación modular y la multiplicación de precisión múltiple, el tiempo de ejecución de este algoritmo es O ( k log 2 n log log n ) = Õ ( k log 2 n ) , donde k es el número de veces que probamos un a aleatorio , y n es el valor que queremos probar para primalidad; consulte la prueba de primalidad de Miller-Rabin para obtener más detalles.
Defecto
Hay infinitos pseudoprimos de Fermat para cualquier base dada a > 1. [ 1 ] : Teorema 1 Peor aún, hay infinitos números de Carmichael . [ 2 ] Estos son númerospara los cuales todos los valores deconson mentirosos de Fermat. Para estos números, la aplicación repetida de la prueba de primalidad de Fermat produce el mismo resultado que una simple búsqueda aleatoria de factores. Si bien los números de Carmichael son sustancialmente más raros que los números primos (el límite superior de Erdős para el número de números de Carmichael [ 3 ] es menor que la función de número primo n/log(n) ), hay suficientes como para que la prueba de primalidad de Fermat no se utilice con frecuencia en la forma anterior. En cambio, se utilizan con mayor frecuencia otras extensiones más potentes de la prueba de Fermat, como Baillie-PSW , Miller-Rabin y Solovay-Strassen .
En general, siSi es un número compuesto que no es un número de Carmichael, entonces al menos la mitad de todos
- (es decir)
son testigos de Fermat. Para probar esto,ser testigo de Fermat y,, ...,Sean mentirosos de Fermat. Entonces
y así todosparason testigos de Fermat.
Corolarios
Análogo al residuo de Lucas-Lehmer ,Se denomina residuo de Fermet de n a base a . Existen algunas variantes que producen diferentes tipos de residuos, [ 4 ] siendo el más importante el residuo primo probable fuerte (SPRP). [ 5 ]
Exponenciación eficiente
Para los números de Mersenne (o más ampliamente, cualquier, p no necesariamente un número primo), es más eficiente calcularque calculardebido a la exponenciación por cuadrado, se prefiere un peso de Hamming bajo (número de unos) en el exponente. El r deseado se puede recuperar multiplicando por el inverso modular demod n . Alternativamente, se puede recuperar encontrando un pequeño multiplicador u tal quees divisible poren aritmética entera ordinaria, entoncesEsto puede proceder por ensayo y error, o al notar que. [ 6 ]
Prueba de cofactores de n
Si se conoce el residuo r de n en base a , entonces para cualquier divisor propio k de n , es posible realizar una prueba de primalidad rápida, aunque más débil, sobre n / k . Si n / k es primo, por el teorema de Fermaty. Como resultado, que puede comprobarse de forma mucho más eficiente para valores de k mucho menores que n . (Este es el método utilizado por la Gran Búsqueda de Números Primos de Mersenne en Internet para probar cofactores). [ 4 ]
Se puede realizar una forma aún más débil de la prueba con una muestra truncada.si el espacio de almacenamiento para el residuo es una preocupación, siempre y cuandoy. Dejar, entoncespara algún w . Toma este módulo 2 t y tenemos. n / k es compuesto si. Se puede realizar una prueba similar en residuos de Lucas-Lehmer truncados. [ 7 ]
Camino hacia el determinismo
También es cierto que si todas las bases a se comprueban sistemáticamente en el intervalo, cada uno demostrando congruencia con 1, la prueba es efectivamente determinista. Podemos decir que n es definitivamente primo. A simple vista se puede suponer que n existe en la unión de números primos y números de Carmichael para tal escenario, pero si se comprueban sistemáticamente los valores de en el intervalo, uno seguramente será un factor primo de un n compuesto en algún punto antesDe esta forma, a y n no son coprimos, lo que provoca que no se cumpla la congruencia, incluso si n es un número de Carmichael. Los números de Carmichael no cumplen la congruencia de Fermat con 1 si la base utilizada no es coprima. Si bien esto resulta computacionalmente más costoso que la comprobación de divisibilidad por fuerza bruta (división por tanteo), tiene un valor teórico.
Aplicaciones
Como se mencionó anteriormente, la mayoría de las aplicaciones utilizan la prueba de Miller-Rabin o Baillie-PSW para determinar la primalidad. En ocasiones, se realiza primero una prueba de Fermat (junto con algunas divisiones de prueba por números primos pequeños) para mejorar el rendimiento. GMP, desde la versión 3.0, utiliza una prueba de Fermat en base 210 después de la división de prueba y antes de ejecutar las pruebas de Miller-Rabin. Libgcrypt utiliza un proceso similar con base 2 para la prueba de Fermat, pero OpenSSL no.
En la práctica, con la mayoría de las bibliotecas de números grandes como GMP, la prueba de Fermat no es notablemente más rápida que una prueba de Miller-Rabin, y puede ser más lenta para muchas entradas. [ 8 ]
Como excepción, OpenPFGW utiliza únicamente la prueba de Fermat para la comprobación de números primos probables. El programa se suele utilizar con entradas de miles de dígitos, buscando la máxima velocidad con entradas muy grandes. Otro programa conocido que se basa exclusivamente en la prueba de Fermat es PGP, donde se utiliza únicamente para la comprobación de valores aleatorios grandes autogenerados (una contraparte de código abierto, GNU Privacy Guard , utiliza una prueba previa de Fermat seguida de pruebas de Miller-Rabin).
Proyectos de búsqueda de números primos
Los proyectos de computación voluntaria en Internet , como Great Internet Mersenne Prime Search (GIMPS) y PrimeGrid, utilizan la prueba de primalidad de Fermat debido a la existencia de un esquema de prueba eficiente (Gerbicz-Li) para la exponenciación modular. Los resultados intermedios seleccionados, combinados con una función de retardo verificable , se utilizan para generar un archivo de " prueba " que verifica la autenticidad y corrección del cálculo, protegiendo contra errores de hardware y ataques maliciosos. Esta prueba es difícil de falsificar dada una suposición de orden bajo. La forma original de la verificación (Gerbicz-Pietrzak) solo funcionaba con n derivable de potencias de 2, como en el caso de los primos de Mersenne, los cofactores de Mersenne y los primos de Proth; la modificación de Li la generaliza a cualquier n . [ 9 ]
GIMPS, en particular, prueba los números primos de Mersenne y los cofactores de Mersenne. Por defecto, se utiliza a = 3, ya que todos los números de Mersenne pasarían la prueba con a = 2.
Referencias
- 1 2 Carl Pomerance ; John L. Selfridge ; Samuel S. Wagstaff, Jr. (julio de 1980). "Los pseudoprimos hasta 25·10 9 " (PDF) . Mathematics of Computation . 35 (151): 1003– 1026. doi : 10.1090/S0025-5718-1980-0572872-7 . JSTOR 2006210 .
- ↑ Alford, WR ; Granville, Andrew ; Pomerance, Carl (1994). "Hay infinitos números de Carmichael" (PDF) . Annals of Mathematics . 140 (3): 703–722 . doi : 10.2307/2118576 . JSTOR 2118576 .
- ↑ Paul Erdős (1956). "Sobre pseudoprimos y números de Carmichael". Publ. Matemáticas. Debrecen . 4 : 201–206 . SEÑOR 0079031 .
- 1 2 "primenet.h" . GitHub .
Hay (al menos) 5 tipos de residuos PRP para probar N=(k*b^n+c)/d: (1) Fermat PRP. Calcular a^(N-1) mod N. PRP si el resultado = 1. (2) Variante SPRP. Calcular a^((N-1)/2) mod N. PRP si el resultado = +/-1. (3) Variante de tipo 1, b=2, d=1. Calcular a^(Nc) mod N. PRP si el resultado = a^-(c-1). (4) Variante de tipo 2, b=2, d=1. Calcular a^((Nc)/2) mod N. PRP si el resultado = +/-a^-((c-1)/2). (5) Variante de cofactor. Calcular a^(N*d-1) mod N*d. PRP si el resultado = a^(d-1) mod N.
- ↑ "El glosario de números primos: primo probable fuerte" . t5k.org .
- ↑ Mayer, Ernst. "Mlucas.c" . GitHub .
- ↑ Gerbicz, Robert (22 de junio de 2018). "Ahorro de toneladas de pruebas de PRP-C y LL-C (hipotéticas), un nuevo método" . www.mersenneforum.org .
- ↑ Joe Hurd (2003), Verificación de la prueba de primalidad probabilística de Miller-Rabin , pág. 2, CiteSeerX 10.1.1.105.3196
- ↑ Darren Li; Yves Gallot (8 de febrero de 2023). "Un esquema eficiente de prueba de exponenciación modular". arXiv : 2209.15623 [ cs.CR ].
- Thomas H. Cormen ; Charles E. Leiserson ; Ronald L. Rivest ; Clifford Stein ( 2001). «Sección 31.8: Prueba de primalidad». Introducción a los algoritmos (Segunda edición). MIT Press; McGraw-Hill. págs. 889-890 . ISBN 0-262-03293-7.
- Pruebas de primalidad
- aritmética modular
- Pierre de Fermat