fbpx
Wikipedia

Algoritmo rho de Pollard

El algoritmo rho de Pollard es un algoritmo especializado de factorización de números enteros. Fue inventado por John Pollard en 1975. Es especialmente efectivo a la hora de factorizar números compuestos que tengan factores pequeños.

Ideas principales

El algoritmo rho se basa en el algoritmo de la liebre y la tortuga y en la observación de que (como ocurre en el problema del cumpleaños) dos números x e y son congruentes módulo p con probabilidad 0,5 tras haberse elegido aleatoriamente   números. Si p es factor de n, el número que se quiere factorizar, entonces  , ya que p divide tanto a   como a n.

El algoritmo rho emplea pues una función módulo n a modo de generador de una secuencia pseudoaleatoria. Hace funcionar una de las secuencias el doble de rápido que la otra, es decir, por cada iteración de una de las copias de la secuencia, la otra hace dos iteraciones. Sea x el estado actual de una secuencia e y el estado actual de la otra. En cada paso se toma el máximo común divisor (MCD) de |xy| y n. Si este MCD llega a ser n, entonces finaliza el algoritmo con el resultado de fracaso, ya que esto significa que x = y y, por el algoritmo de la liebre y la tortuga, la secuencia ya ha completado su ciclo y seguir más allá sólo conseguiría repetir trabajo ya realizado.

El algoritmo

Entradas: n, el número que se desea factorizar; y f(x), una función pseudoaleatoria módulo n

Salidas: un factor no trivial de n, o bien un fracaso. (un factor trivial de n es n mismo o 1)

  1. x ← 2, y ← 2; d ← 1
  2. Mientras d = 1:
    1. xf(x)
    2. yf(f(y))
    3. d ← MCD(|xy|, n)
  3. Si d = n, devuelve fracaso.
  4. De lo contrario, devuelve d.

Nótese que este algoritmo acabará en fracaso para todo n primo, pero también puede fallar para un n compuesto. En ese caso, se cambia la función f(x) y se intenta de nuevo.

Optimización

En 1980, Richard Brent publicó una versión del algoritmo más rápida. Empleó las mismas ideas fundamentales que Pollard pero un método distinto de detección de ciclos, reemplazando el algoritmo de la liebre y la tortuga por el algoritmo de Brent para la detección de ciclos.

Pollard y Brent introdujeron una mejora adicional. Observaron que si  , entonces también se cumple que   para cada entero positivo  . En particular, en lugar de computar   en cada paso, basta definir   como el producto de cien términos consecutivos de   módulo n, para luego computar un solo  . Se obtiene un importante ahorro de tiempo, ya que se ven reemplazados 100 cálculos de un máximo común divisor por 99 multiplicaciones módulo   y un solo  . A veces se da lugar a un error en el algoritmo al introducir un factor repetido, por ejemplo, cuando   es un cuadrado. Sin embargo, basta con volver atrás al cálculo anterior del  , donde  , y a partir de ahí volver a usar el algoritmo rho original.

En la práctica

El algoritmo es muy rápido en la factorización de números que tienen factores pequeños. Por ejemplo, en un equipo de trabajo de 3 GHz, el algoritmo original halló el factor 274177 del sexto número de Fermat (18446744073709551617) en 26 milisegundos. En cambio, la variante de Richard Brent halló el mismo factor en sólo 5 milisegundos. Sin embargo, en el caso de un semiprimo del mismo número de cifras (10023859281455311421), el mismo equipo tardó 109 milisegundos en encontrar un factor con el algoritmo original, y 31 con la variante de Richard Brent.

Para f se elige un polinomio con coeficientes enteros. Los más comunes son de la forma

 

El éxito más relevante del algoritmo rho ha sido la factorización del octavo número de Fermat, realizada por Pollard y Brent. Emplearon la variante de Brent, que halló un factor hasta entonces desconocido. La factorización completa de F8 tardó dos horas en un UNIVAC 1100/42.

Ejemplo

Sea n = 8051 y f(x) = x2 + 1 mód 8051.

i xi yi MCD(|xiyi|, 8051)
1 5 26 1
2 26 7474 1
3 677 871 97

97 es un factor no trivial de 8051. Otros valores de c pueden dar lugar al cofactor (83) en lugar de 97.

Complejidad

El algoritmo ofrece un equilibrio entre su tiempo de ejecución y la probabilidad de encontrar un factor.

Si n es producto de dos primos distintos de tamaño similar, al ejecutar el algoritmo en O(n1/4 polylog(n)) iteraciones se obtiene un factor con probabilidad aproximadamente 0,5. (Nótese que ésta es una afirmación heurística, y que sigue abierto un análisis riguroso del algoritmo.)

Referencias

Enlaces externos

  • (página en inglés)
  •   Datos: Q946489

algoritmo, pollard, para, otros, usos, este, término, véase, algoritmo, pollard, para, logaritmos, discretos, algoritmo, pollard, algoritmo, especializado, factorización, números, enteros, inventado, john, pollard, 1975, especialmente, efectivo, hora, factoriz. Para otros usos de este termino vease algoritmo rho de Pollard para logaritmos discretos El algoritmo rho de Pollard es un algoritmo especializado de factorizacion de numeros enteros Fue inventado por John Pollard en 1975 Es especialmente efectivo a la hora de factorizar numeros compuestos que tengan factores pequenos Indice 1 Ideas principales 2 El algoritmo 3 Optimizacion 4 En la practica 5 Ejemplo 6 Complejidad 7 Referencias 8 Enlaces externosIdeas principales EditarEl algoritmo rho se basa en el algoritmo de la liebre y la tortuga y en la observacion de que como ocurre en el problema del cumpleanos dos numeros x e y son congruentes modulo p con probabilidad 0 5 tras haberse elegido aleatoriamente 1 177 p displaystyle 1 177 sqrt p numeros Si p es factor de n el numero que se quiere factorizar entonces 1 lt mcd x y n n displaystyle 1 lt operatorname mcd left x y n right leq n ya que p divide tanto a x y displaystyle left x y right como a n El algoritmo rho emplea pues una funcion modulo n a modo de generador de una secuencia pseudoaleatoria Hace funcionar una de las secuencias el doble de rapido que la otra es decir por cada iteracion de una de las copias de la secuencia la otra hace dos iteraciones Sea x el estado actual de una secuencia e y el estado actual de la otra En cada paso se toma el maximo comun divisor MCD de x y y n Si este MCD llega a ser n entonces finaliza el algoritmo con el resultado de fracaso ya que esto significa que x y y por el algoritmo de la liebre y la tortuga la secuencia ya ha completado su ciclo y seguir mas alla solo conseguiria repetir trabajo ya realizado El algoritmo EditarEntradas n el numero que se desea factorizar y f x una funcion pseudoaleatoria modulo nSalidas un factor no trivial de n o bien un fracaso un factor trivial de n es n mismo o 1 x 2 y 2 d 1 Mientras d 1 x f x y f f y d MCD x y n Si d n devuelve fracaso De lo contrario devuelve d Notese que este algoritmo acabara en fracaso para todo n primo pero tambien puede fallar para un n compuesto En ese caso se cambia la funcion f x y se intenta de nuevo Optimizacion EditarEn 1980 Richard Brent publico una version del algoritmo mas rapida Empleo las mismas ideas fundamentales que Pollard pero un metodo distinto de deteccion de ciclos reemplazando el algoritmo de la liebre y la tortuga por el algoritmo de Brent para la deteccion de ciclos Pollard y Brent introdujeron una mejora adicional Observaron que si mcd a n gt 1 displaystyle operatorname mcd a n gt 1 entonces tambien se cumple que mcd a b n gt 1 displaystyle operatorname mcd ab n gt 1 para cada entero positivo b displaystyle b En particular en lugar de computar mcd x y n displaystyle operatorname mcd x y n en cada paso basta definir z displaystyle z como el producto de cien terminos consecutivos de x y displaystyle x y modulo n para luego computar un solo mcd z n displaystyle operatorname mcd z n Se obtiene un importante ahorro de tiempo ya que se ven reemplazados 100 calculos de un maximo comun divisor por 99 multiplicaciones modulo n displaystyle n y un solo mcd displaystyle operatorname mcd A veces se da lugar a un error en el algoritmo al introducir un factor repetido por ejemplo cuando n displaystyle n es un cuadrado Sin embargo basta con volver atras al calculo anterior del mcd displaystyle operatorname mcd donde mcd z n 1 displaystyle operatorname mcd z n 1 y a partir de ahi volver a usar el algoritmo rho original En la practica EditarEl algoritmo es muy rapido en la factorizacion de numeros que tienen factores pequenos Por ejemplo en un equipo de trabajo de 3 GHz el algoritmo original hallo el factor 274177 del sexto numero de Fermat 18446744073709551617 en 26 milisegundos En cambio la variante de Richard Brent hallo el mismo factor en solo 5 milisegundos Sin embargo en el caso de un semiprimo del mismo numero de cifras 10023859281455311421 el mismo equipo tardo 109 milisegundos en encontrar un factor con el algoritmo original y 31 con la variante de Richard Brent Para f se elige un polinomio con coeficientes enteros Los mas comunes son de la forma f x x 2 c mod n c 0 2 displaystyle f x x 2 c hbox mod n c neq 0 2 El exito mas relevante del algoritmo rho ha sido la factorizacion del octavo numero de Fermat realizada por Pollard y Brent Emplearon la variante de Brent que hallo un factor hasta entonces desconocido La factorizacion completa de F8 tardo dos horas en un UNIVAC 1100 42 Ejemplo EditarSea n 8051 y f x x2 1 mod 8051 i xi yi MCD xi yi 8051 1 5 26 12 26 7474 13 677 871 9797 es un factor no trivial de 8051 Otros valores de c pueden dar lugar al cofactor 83 en lugar de 97 Complejidad EditarEl algoritmo ofrece un equilibrio entre su tiempo de ejecucion y la probabilidad de encontrar un factor Si n es producto de dos primos distintos de tamano similar al ejecutar el algoritmo en O n1 4 polylog n iteraciones se obtiene un factor con probabilidad aproximadamente 0 5 Notese que esta es una afirmacion heuristica y que sigue abierto un analisis riguroso del algoritmo Referencias EditarJ M Pollard A Monte Carlo method for factorization BIT Numerical Mathematics 15 3 1975 pp 331 334 Richard P Brent An Improved Monte Carlo Factorization Algorithm BIT 20 1980 pp 176 184 https web archive org web 20090924082516 http wwwmaths anu edu au brent pd rpb051i pdf Thomas H Cormen Charles E Leiserson Ronald L Rivest and Clifford Stein Introduction to Algorithms Segunda edicion MIT Press y McGraw Hill 2001 ISBN 0 262 03293 7 Section 31 9 Integer factorization pp 896 901 esta seccion solo versa sobre el algoritmo rho de Pollard Enlaces externos EditarImplementacion Java pagina en ingles Datos Q946489 Obtenido de https es wikipedia org w index php title Algoritmo rho de Pollard amp oldid 130176454, 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