fbpx
Wikipedia

Test de primalidad de Miller-Rabin

El test de primalidad de Miller-Rabin es un test de primalidad, es decir, un algoritmo para determinar si un número dado es primo, similar al test de primalidad de Fermat. Su versión original fue propuesta por G. L. Miller, se trataba de un algoritmo determinista, pero basado en la no demostrada hipótesis generalizada de Riemann;[1]Michael Oser Rabin modificó la propuesta de Miller para obtener un algoritmo probabilístico que no utiliza resultados no probados.[2]

Conceptos matemáticos

De forma similar a las pruebas Fermat y Solovay-Strassen, la prueba de primalidad de Miller-Rabin comprueba si una propiedad específica, que se sabe que es verdadera para los números primos, se satisface para el número a prueba.

Probables primos fuertes

Dado un entero impar n > 2, escribimos n como 2sd + 1 donde s y d son enteros positivos y d es impar. Sea a un número entero tal que 0 < a < n. Entonces, diremos que n es probable primo fuerte para la base a si se cumple alguna de las siguientes relaciones de congruencia:

  •  ;
  •   para algún 0 ≤ r < s.

La idea detrás del test de Miller-Rabín es que cuando n es un primo impar, pasa el test debido a dos resultados:

  • por el pequeño teorema de Fermat,   (esta propiedad por si sola es una noción más débil probable primo débil para la base a, sobre la cual está basado el test de primalidad de Fermat);
  • las únicas raíces cuadradas del 1 módulo n son 1 and −1.

Por contraposición, si n no es un probable primo fuerte para alguna base a, entonces n es compuesto y a es llamado un testigo de la propiedad de que n es compuesto.

Sin embargo, esta propiedad no es una caracterización exacta de los números primos. Si n es compuesto, puede haber una base a para la cual n sea probable primo fuerte, en cuyo caso se llama un pseudoprimo fuerte y a se lo denomina un mentiroso fuerte.

El test probabilístico de Miller-Rabin se basa en la comprobación para diferentes bases de que un número dado es probable primo fuerte.

Elección de bases

Afortunadamente, ningún número compuesto es un pseudoprimo fuerte para todas las bases al mismo tiempo. Sin embargo, no se conoce una forma sencilla de encontrar un testigo. Una solución ingenua es probar todas las bases posibles, lo que produce un algoritmo determinista ineficiente. La prueba de Miller determinista es una variante más eficiente de esto.

Otra solución es elegir una base al azar. Esto produce una rápida prueba probabilística. Cuando n es compuesto, la mayoría de las bases son testigos, por lo que la prueba detectará n como compuesto con una probabilidad razonablemente alta, mayor que 0.75. Podemos reducir rápidamente la probabilidad de un falso positivo a una tasa arbitrariamente pequeña, combinando el resultado de tantas bases elegidas independientemente como sea necesario para lograr dicha tasa. En esto consiste el test probabilístico de Miller-Rabin. El número de bases a probar no depende de n.

Para hacer el test a un n arbitrariamente grande, elegir bases al azar es esencial, ya que no conocemos la distribución de testigos y mentirosos fuertes entre los números 1, 2, …, n−1.[4]


Demostraciones

Aquí una demostración de que cuando n es un primo impar, las únicas raíces cuadradas de 1 módulo n son 1 y −1.

Demostración
Sea x tal que  , luego  , como  , obtenemos  . Esto quiere decir que  . Como n es primo,   o  , es decir   o  .

Aquí una demostración de que si n es un primo impar, entonces n es probable primo fuerte para cualquier base a.

Demostración
Consideremos la sucesión   y observemos que cada término de la sucesión es el cuadrado del siguiente.
  • Por el teorema de Fermat  . Luego   y por lo tanto   es una raíz cuadrada de 1 módulo n. Por lo anterior obtenemos que  .
  • Si  , obtenemos el resultado. En caso contrario  , luego   y por lo tanto   es una raíz cuadrada de 1 módulo n y en consecuencia  .
  • Iterando el razonamiento anterior concluimos que alguno de los términos de la sucesión   es congruente a -1 módulo n o bien todos los términos son congruentes a 1, en particular  , con lo cual n resulta ser probable primo fuerte.

Test de Miller–Rabin

El algoritmo se puede escribir en pseudocódigo de la siguiente manera. El parámetro k determina la precisión de la prueba. Cuanto mayor sea el número de rondas (k es el número de rondas), mayor precisión tendrá el resultado.

Pseudocódigo estilo Python:

def test_Miller_Rabin(n: int, k: int) -> bool: s, d = satisfacen n = 2**s * d + 1, d impar repetir k veces: a = entero al azar entre 2 y n-1 fpp = False # fuertemente primo en base a if 1 == a**d % n: fpp = True else: r = 0 while r <= s and fpp == False: if n - 1 == a**(2**r * d) % n: fpp = True if fpp == False: # si no pasa la prueba return False # si pasó las k pruebas return True 

Complejidad

El tiempo de ejecución de este algoritmo es  , donde n es el número testeado y k es el número de rondas realizadas; por lo tanto, este es un algoritmo eficiente, de tiempo polinomial respecto a la cantidad de dígitos de n. La multiplicación basada en transformada rápida de Fourier puede reducir el tiempo de ejecución a  .

Fiabilidad del test

Debido a su baja probabilidad de fallo, es el test más utilizado en la práctica, a la hora de aplicaciones en criptografía de clave pública.[5]

Se puede demostrar que un número que pasa una prueba de ser probable primo fuerte tiene una probabilidad de 3/4 de ser primo. Luego, que la probabilidad de que un número compuesto pase h iteraciones del test con bases escogidas al azar es menor a  . En la práctica, la probabilidad parece ser mucho menor, según un artículo de Damgård, Landrock y Pomerance.[6]

Asumiendo correcta la hipótesis generalizada de Riemann, se puede demostrar que, n es probable primo fuerte para a tal que   entonces n es un número primo. Con esto se tiene un test determinístico de primalidad de costo  .

Referencias

  1. Miller, Gary (1975). «Riemann's Hypothesis and tests for primality». Journal of Computer and System Sciences 13 (3): 300-317. doi:10.1016/S0022-0000(76)80043-8. 
  2. Rabin, Michael (1980). «Probabilistic algorithm for testing primality». Journal of Number Theory 12 (1): 128-138. doi:10.1016/0022-314X(80)90084-0. 
  3. F. Arnault (agosto de 1995). «Construyendo números de Carmichael que son fuertes pseudoprimes en varias bases». Journal of Symbolic Computation 20 (2): 151-161. doi:10.1006/jsco.1995.1042. 
  4. Por ejemplo, en 1995, Arnault da un número compuesto de 397 dígitos para el cual todas las bases menores a 307 son mentirosas fuertes; se informó que este número es primo por la función Maple isprime () , porque implementó la prueba de Miller-Rabin con las bases específicas 2, 3, 5, 7 y 11. [3]
  5. Menezes, Alfred; van Oorschot, Paul; Vanstone, Scott (2001). «Public-Key Parameters». En CRC, ed. Handbook of applied cryptography (en inglés) (quinta edición). p. 138. ISBN 0-8493-8523-7. Consultado el 14 de febrero de 2016. 
  6. Damgård, Ivan; Landrock, Peter; Pomerance, Carl (1993). «Average case error estimates for the strong probable prime test». Mathematics of Computation (en inglés) 61 (203): 177-194. doi:10.2307/2152945. 

Enlaces externos

  •   Datos: Q980224

test, primalidad, miller, rabin, test, primalidad, miller, rabin, test, primalidad, decir, algoritmo, para, determinar, número, dado, primo, similar, test, primalidad, fermat, versión, original, propuesta, miller, trataba, algoritmo, determinista, pero, basado. El test de primalidad de Miller Rabin es un test de primalidad es decir un algoritmo para determinar si un numero dado es primo similar al test de primalidad de Fermat Su version original fue propuesta por G L Miller se trataba de un algoritmo determinista pero basado en la no demostrada hipotesis generalizada de Riemann 1 Michael Oser Rabin modifico la propuesta de Miller para obtener un algoritmo probabilistico que no utiliza resultados no probados 2 Indice 1 Conceptos matematicos 1 1 Probables primos fuertes 1 2 Eleccion de bases 1 3 Demostraciones 2 Test de Miller Rabin 3 Complejidad 4 Fiabilidad del test 5 Referencias 6 Enlaces externosConceptos matematicos EditarDe forma similar a las pruebas Fermat y Solovay Strassen la prueba de primalidad de Miller Rabin comprueba si una propiedad especifica que se sabe que es verdadera para los numeros primos se satisface para el numero a prueba Probables primos fuertes Editar Dado un entero impar n gt 2 escribimos n como 2s d 1 donde s y d son enteros positivos y d es impar Sea a un numero entero tal que 0 lt a lt n Entonces diremos que n es probable primo fuerte para la base a si se cumple alguna de las siguientes relaciones de congruencia a d 1 mod n displaystyle a d equiv 1 pmod n a 2 r d 1 mod n displaystyle a 2 r cdot d equiv 1 pmod n para algun 0 r lt s La idea detras del test de Miller Rabin es que cuando n es un primo impar pasa el test debido a dos resultados por el pequeno teorema de Fermat a n 1 1 mod n displaystyle a n 1 equiv 1 pmod n esta propiedad por si sola es una nocion mas debil probable primo debil para la base a sobre la cual esta basado el test de primalidad de Fermat las unicas raices cuadradas del 1 modulo n son 1 and 1 Por contraposicion si n no es un probable primo fuerte para alguna base a entonces n es compuesto y a es llamado un testigo de la propiedad de que n es compuesto Sin embargo esta propiedad no es una caracterizacion exacta de los numeros primos Si n es compuesto puede haber una base a para la cual n sea probable primo fuerte en cuyo caso se llama un pseudoprimo fuerte y a se lo denomina un mentiroso fuerte El test probabilistico de Miller Rabin se basa en la comprobacion para diferentes bases de que un numero dado es probable primo fuerte Eleccion de bases Editar Afortunadamente ningun numero compuesto es un pseudoprimo fuerte para todas las bases al mismo tiempo Sin embargo no se conoce una forma sencilla de encontrar un testigo Una solucion ingenua es probar todas las bases posibles lo que produce un algoritmo determinista ineficiente La prueba de Miller determinista es una variante mas eficiente de esto Otra solucion es elegir una base al azar Esto produce una rapida prueba probabilistica Cuando n es compuesto la mayoria de las bases son testigos por lo que la prueba detectara n como compuesto con una probabilidad razonablemente alta mayor que 0 75 Podemos reducir rapidamente la probabilidad de un falso positivo a una tasa arbitrariamente pequena combinando el resultado de tantas bases elegidas independientemente como sea necesario para lograr dicha tasa En esto consiste el test probabilistico de Miller Rabin El numero de bases a probar no depende de n Para hacer el test a un n arbitrariamente grande elegir bases al azar es esencial ya que no conocemos la distribucion de testigos y mentirosos fuertes entre los numeros 1 2 n 1 4 Demostraciones Editar Aqui una demostracion de que cuando n es un primo impar las unicas raices cuadradas de 1 modulo n son 1 y 1 DemostracionSea x tal que x 2 1 mod n displaystyle x 2 equiv 1 pmod n luego x 2 1 0 mod n displaystyle x 2 1 equiv 0 pmod n como x 2 1 x 1 x 1 displaystyle x 2 1 x 1 x 1 obtenemos x 1 x 1 0 mod n displaystyle x 1 x 1 equiv 0 pmod n Esto quiere decir que n x 1 x 1 displaystyle n x 1 x 1 Como n es primo n x 1 displaystyle n x 1 o n x 1 displaystyle n x 1 es decir x 1 mod n displaystyle x equiv 1 pmod n o x 1 mod n displaystyle x equiv 1 pmod n Aqui una demostracion de que si n es un primo impar entonces n es probable primo fuerte para cualquier base a DemostracionConsideremos la sucesion a 2 s d a 2 s 1 d a 2 d a d displaystyle a 2 s cdot d a 2 s 1 cdot d dots a 2d a d y observemos que cada termino de la sucesion es el cuadrado del siguiente Por el teorema de Fermat a 2 s d a n 1 1 mod n displaystyle a 2 s cdot d a n 1 equiv 1 pmod n Luego a 2 s 1 d 2 1 mod n displaystyle a 2 s 1 cdot d 2 equiv 1 pmod n y por lo tanto a 2 s 1 d displaystyle a 2 s 1 cdot d es una raiz cuadrada de 1 modulo n Por lo anterior obtenemos que a 2 s 1 d 1 mod n displaystyle a 2 s 1 cdot d equiv pm 1 pmod n Si a 2 s 1 d 1 mod n displaystyle a 2 s 1 cdot d equiv 1 pmod n obtenemos el resultado En caso contrario a 2 s 1 d 1 mod n displaystyle a 2 s 1 cdot d equiv 1 pmod n luego a 2 s 2 d 2 1 mod n displaystyle a 2 s 2 cdot d 2 equiv 1 pmod n y por lo tanto a 2 s 2 d displaystyle a 2 s 2 cdot d es una raiz cuadrada de 1 modulo n y en consecuencia a 2 s 2 d 1 mod n displaystyle a 2 s 2 cdot d equiv pm 1 pmod n Iterando el razonamiento anterior concluimos que alguno de los terminos de la sucesion a 2 r d displaystyle a 2 r cdot d es congruente a 1 modulo n o bien todos los terminos son congruentes a 1 en particular a d 1 mod n displaystyle a d equiv 1 pmod n con lo cual n resulta ser probable primo fuerte Test de Miller Rabin EditarEl algoritmo se puede escribir en pseudocodigo de la siguiente manera El parametro k determina la precision de la prueba Cuanto mayor sea el numero de rondas k es el numero de rondas mayor precision tendra el resultado Pseudocodigo estilo Python def test Miller Rabin n int k int gt bool s d satisfacen n 2 s d 1 d impar repetir k veces a entero al azar entre 2 y n 1 fpp False fuertemente primo en base a if 1 a d n fpp True else r 0 while r lt s and fpp False if n 1 a 2 r d n fpp True if fpp False si no pasa la prueba return False si paso las k pruebas return TrueComplejidad EditarEl tiempo de ejecucion de este algoritmo es O k ln 3 n displaystyle O k ln 3 n donde n es el numero testeado y k es el numero de rondas realizadas por lo tanto este es un algoritmo eficiente de tiempo polinomial respecto a la cantidad de digitos de n La multiplicacion basada en transformada rapida de Fourier puede reducir el tiempo de ejecucion a O k ln 2 n ln n ln ln ln n displaystyle O k ln 2 n ln n ln ln ln n Fiabilidad del test EditarDebido a su baja probabilidad de fallo es el test mas utilizado en la practica a la hora de aplicaciones en criptografia de clave publica 5 Se puede demostrar que un numero que pasa una prueba de ser probable primo fuerte tiene una probabilidad de 3 4 de ser primo Luego que la probabilidad de que un numero compuesto pase h iteraciones del test con bases escogidas al azar es menor a 1 4 h displaystyle tfrac 1 4 h En la practica la probabilidad parece ser mucho menor segun un articulo de Damgard Landrock y Pomerance 6 Asumiendo correcta la hipotesis generalizada de Riemann se puede demostrar que n es probable primo fuerte para a tal que 0 a 2 ln 2 n displaystyle 0 leq a leq 2 ln 2 n entonces n es un numero primo Con esto se tiene un test deterministico de primalidad de costo O ln 4 n displaystyle O ln 4 n Referencias Editar Miller Gary 1975 Riemann s Hypothesis and tests for primality Journal of Computer and System Sciences 13 3 300 317 doi 10 1016 S0022 0000 76 80043 8 fechaacceso requiere url ayuda Rabin Michael 1980 Probabilistic algorithm for testing primality Journal of Number Theory 12 1 128 138 doi 10 1016 0022 314X 80 90084 0 fechaacceso requiere url ayuda F Arnault agosto de 1995 Construyendo numeros de Carmichael que son fuertes pseudoprimes en varias bases Journal of Symbolic Computation 20 2 151 161 doi 10 1006 jsco 1995 1042 Por ejemplo en 1995 Arnault da un numero compuesto de 397 digitos para el cual todas las bases menores a 307 son mentirosas fuertes se informo que este numero es primo por la funcion Maple isprime porque implemento la prueba de Miller Rabin con las bases especificas 2 3 5 7 y 11 3 Menezes Alfred van Oorschot Paul Vanstone Scott 2001 Public Key Parameters En CRC ed Handbook of applied cryptography en ingles quinta edicion p 138 ISBN 0 8493 8523 7 Consultado el 14 de febrero de 2016 Damgard Ivan Landrock Peter Pomerance Carl 1993 Average case error estimates for the strong probable prime test Mathematics of Computation en ingles 61 203 177 194 doi 10 2307 2152945 Enlaces externos Editar Wikilibros alberga un libro o manual sobre implementaciones del test de primalidad de Miller Rabin Weisstein Eric W Rabin Miller Strong Pseudoprime Test En Weisstein Eric W ed MathWorld en ingles Wolfram Research Codigo del test en C Datos Q980224 Obtenido de https es wikipedia org w index php title Test de primalidad de Miller Rabin amp oldid 141422830, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos