Articulo de referencia

Prueba de primalidad de Fermat

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 pr...

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

apag11(modpag).{\displaystyle a^{p-1}\equiv 1{\pmod {p}}.}

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 paraa1(modpag){\displaystyle a\equiv 1{\pmod {p}}}, porque la relación de congruencia es compatible con la exponenciación . También se cumple trivialmente paraa1(modpag){\displaystyle a\equiv -1{\pmod {p}}}Si p es impar, por la misma razón. Por eso, normalmente se elige un valor aleatorio a en el intervalo1<a<pag1{\displaystyle 1<a<p-1}.

Cualquiera de tal tipo que

anorte11(modnorte){\displaystyle a^{n-1}\equiv 1{\pmod {n}}}

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

anorte11(modnorte){\displaystyle a^{n-1}\not \equiv 1{\pmod {n}}}

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:

anorte1=382201(mod221).{\displaystyle a^{n-1}=38^{220}\equiv 1{\pmod {221}}.}

O bien 221 es primo, o bien 38 es un mentiroso de Fermat, así que tomamos otro a , digamos 24:

anorte1=24220811(mod221).{\displaystyle a^{n-1}=24^{220}\equiv 81\not \equiv 1{\pmod {221}}.}

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].
Sianorte11(modnorte){\displaystyle a^{n-1}\not \equiv 1{\pmod {n}}}, 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úmerosnorte{\displaystyle n}para los cuales todos los valores dea{\displaystyle a}conmcd(a,norte)=1{\displaystyle \operatorname {gcd} (a,n)=1}son 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, sinorte{\displaystyle n}Si es un número compuesto que no es un número de Carmichael, entonces al menos la mitad de todos

a(Z/norteZ){\displaystyle a\in (\mathbb {Z} /n\mathbb {Z} )^{*}}(es decirmcd(a,norte)=1{\displaystyle \operatorname {gcd} (a,n)=1})

son testigos de Fermat. Para probar esto,a{\displaystyle a}ser testigo de Fermat ya1{\displaystyle a_{1}},a2{\displaystyle a_{2}}, ...,as{\displaystyle a_{s}}Sean mentirosos de Fermat. Entonces

(aai)norte1anorte1ainorte1anorte11(modnorte){\displaystyle (a\cdot a_{i})^{n-1}\equiv a^{n-1}\cdot a_{i}^{n-1}\equiv a^{n-1}\not \equiv 1{\pmod {n}}}

y así todosaai{\displaystyle a\cdot a_{i}}parai=1,2,...,s{\displaystyle i=1,2,...,s}son testigos de Fermat.

Corolarios

Análogo al residuo de Lucas-Lehmer ,r=anorte1(modnorte){\displaystyle r=a^{n-1}{\pmod {n}}}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, cualquiernorte=2pag1{\displaystyle n=2^{p}-1}, p no necesariamente un número primo), es más eficiente calculara2r=a2pag(modnorte){\displaystyle a^{2}r=a^{2^{p}}{\pmod {n}}}que calcularr{\displaystyle r}debido 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 dea2{\displaystyle a^{2}}mod n . Alternativamente, se puede recuperar encontrando un pequeño multiplicador u tal queelevar(a2r)+norte{\displaystyle \operatorname {lift} (a^{2}r)+un}es divisible pora2{\displaystyle a^{2}}en aritmética entera ordinaria, entoncesr=(elevar(a2r)+norte)/a2{\displaystyle r=(\operatorname {lift} (a^{2}r)+un)/a^{2}}Esto puede proceder por ensayo y error, o al notar que=modinv(norte,a2){\displaystyle u=\operatorname {modinv} (n,a^{2})}. [ 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 Fermatanorte/k=ak(modnorte/k){\textstyle a^{n/k}=a^{k}{\pmod {n/k}}}yanorte=ak(modnorte/k){\textstyle a^{n}=a^{k}{\pmod {n/k}}}. Como resultador=ak1(modnorte/k){\textstyle r=a^{k-1}{\pmod {n/k}}}, 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.anorte(modnorte)(mod2t){\displaystyle a^{n}{\pmod {n}}{\pmod {2^{t}}}}si el espacio de almacenamiento para el residuo es una preocupación, siempre y cuandod2t{\textstyle d\leq 2^{t}}ynorte>2t{\displaystyle n>2^{t}}. Dejars=ak(modnorte/k){\textstyle s=a^{k}{\pmod {n/k}}}, entoncesr=s+wnorte/k{\textstyle r=s+wn/k}para algún w . Toma este módulo 2 t y tenemosw=(norte/k)1(sr)(mod2t){\textstyle w=(n/k)^{-1}(s-r){\pmod {2^{t}}}}. n / k es compuesto siwd{\displaystyle w\geq d}. 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[2,norte]{\displaystyle [2,{\sqrt {n}}]}, 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 antesnorte{\displaystyle {\sqrt {n}}}De 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. 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 . 
  2. 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 . 
  3. Paul Erdős (1956). "Sobre pseudoprimos y números de Carmichael". Publ. Matemáticas. Debrecen . 4 : 201–206 . SEÑOR 0079031 . 
  4. 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.
  5. "El glosario de números primos: primo probable fuerte" . t5k.org .
  6. Mayer, Ernst. "Mlucas.c" . GitHub .
  7. 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 .
  8. Joe Hurd (2003), Verificación de la prueba de primalidad probabilística de Miller-Rabin , pág. 2, CiteSeerX 10.1.1.105.3196  
  9. Darren Li; Yves Gallot (8 de febrero de 2023). "Un esquema eficiente de prueba de exponenciación modular". arXiv : 2209.15623 [ cs.CR ].