El algoritmo rho de Pollard es un algoritmo para la factorización de enteros . Fue inventado por John Pollard en 1975. [ 1 ] Utiliza muy poco espacio y su tiempo de ejecución esperado es proporcional a la raíz cuadrada del factor primo más pequeño del número compuesto que se está factorizando.
Ideas principales
El algoritmo se utiliza para factorizar un número., dóndees un factor no trivial. Un polinomio módulo, llamado(p.ej,), se utiliza para generar una secuencia pseudoaleatoria .debe ser un polinomio. Se elige un valor inicial, digamos 2, y la secuencia continúa como,,, etc. La secuencia está relacionada con otra secuencia.. DesdeComo no se conoce de antemano, esta secuencia no puede calcularse explícitamente en el algoritmo. Sin embargo, en ella reside la idea central del algoritmo.
Debido a que el número de valores posibles para estas secuencias es finito, tanto elsecuencia, que es mod, yLa secuencia eventualmente se repetirá, aunque estos valores sean desconocidos. Si las secuencias se comportaran como números aleatorios, la paradoja del cumpleaños implica que el número deSe esperaría que antes de que ocurra una repetición, dóndees el número de valores posibles. Por lo tanto, la secuenciaEs probable que se repita mucho antes que la secuenciaCuando uno ha encontrado unde tal manera quepero, el númeroes un múltiplo de, por lo que se ha encontrado un divisor no trivial. [ 2 ]
Una vez que una secuencia tiene un valor repetido, la secuencia entrará en un ciclo, porque cada valor depende solo del anterior. Esta estructura de ciclo eventual da origen al nombre de "algoritmo rho", debido a su similitud con la forma de la letra griega ρ cuando los valores,, etc., se representan como nodos en un grafo dirigido .

Esto es detectado por el algoritmo de búsqueda de ciclos de Floyd : dos nodosy(es decir,y) se mantienen. En cada paso, uno se mueve al siguiente nodo en la secuencia y el otro avanza dos nodos. Después de eso, se comprueba si. Si no es 1, entonces esto implica que hay una repetición en elsecuencia (es decir. Esto funciona porque si eles lo mismo que, la diferencia entreyes necesariamente un múltiplo deAunque esto siempre sucede eventualmente, el máximo común divisor (MCD) resultante es un divisor dedistinto de 1. Esto puede seren sí mismo, ya que las dos secuencias podrían repetirse al mismo tiempo. En este caso (poco común) el algoritmo falla, puede repetirse con un parámetro diferente.
Algoritmo
El algoritmo toma como entradas n , el número entero a factorizar; y , un polinomio en x calculado módulo n . En el algoritmo original,pero hoy en día es más común usarEl resultado es un factor no trivial de n , o un fallo.
Realiza los siguientes pasos: [ 2 ]
Pseudocódigo para el algoritmo rho de Pollard
x ← 2 // valor inicial y ← x d ← 1 mientras d = 1: x ← g(x) y ← g(g(y)) d ← mcd(|x - y|, n) Si d = n: devolver error; de lo contrario : devolver d
Aquí x e y corresponden ay en la sección anterior. Tenga en cuenta que este algoritmo puede fallar al encontrar un factor no trivial incluso cuando n es compuesto. En ese caso, el método puede intentarse nuevamente, utilizando un valor inicial de x distinto de 2 () o una diferente ,, con.
Ejemplo de factorización
Dejary.

Ahora bien, 97 es un factor no trivial de 8051. Valores iniciales distintos de x = y = 2 pueden dar como resultado el cofactor (83) en lugar de 97. Arriba se muestra una iteración adicional para dejar claro que y se mueve el doble de rápido que x . Nótese que, incluso después de una repetición, el MCD puede volver a ser 1.
Variantes
En 1980, Richard Brent publicó una variante más rápida del algoritmo rho. Utilizó las mismas ideas centrales que Pollard, pero un método diferente de detección de ciclos, reemplazando el algoritmo de búsqueda de ciclos de Floyd con el método de búsqueda de ciclos relacionado de Brent . [ 3 ] CLRS (Cormen et Al. Introduction to Algorithms book) proporciona un análisis heurístico y condiciones de fallo (el divisor trivialse encuentra). [ 2 ]
Pollard y Brent realizaron una mejora adicional. Observaron que si, entonces tambiénpara cualquier entero positivo . En particular, en lugar de calcularEn cada paso, basta con definircomo producto de 100 consecutivostérminos módulo y luego calcular un único. Se produce una importante aceleración ya que 100 pasos de mcd se reemplazan con 99 multiplicaciones módulo y un único mcd . Ocasionalmente puede provocar que el algoritmo falle al introducir un factor repetido, por ejemplo cuandoes un cuadrado . Pero entonces basta con volver al término mcd anterior , dondey utilizar el algoritmo ρ regular a partir de ahí. [ nota 1 ]
Solicitud
El algoritmo es muy rápido para números con factores pequeños, pero más lento en casos donde todos los factores son grandes. El éxito más notable del algoritmo ρ fue la factorización en 1980 del número de Fermat F 8 = 1238926361552897 × 93461639715357977769163558199606896584051237541638188580280321. [ 4 ] El algoritmo ρ fue una buena opción para F 8 porque el factor primo p = 1238926361552897 es mucho menor que el otro factor. La factorización tardó 2 horas en una UNIVAC 1100/42 . [ 4 ]
Ejemplo: factorizando n = 10403 = 101 · 103
La siguiente tabla muestra los números producidos por el algoritmo, comenzando cony utilizando el polinomioLa tercera y la cuarta columna de la tabla contienen información adicional que el algoritmo desconoce. Se incluyen para mostrar cómo funciona el algoritmo.
La primera repetición módulo 101 es 97, que ocurre en el paso 17. La repetición no se detecta hasta el paso 23, cuandoEsto causasery se encuentra un factor.
Complejidad
Si el número pseudoaleatorioSi en el algoritmo ρ de Pollard fuera un número aleatorio real, se seguiría que el éxito se lograría la mitad de las veces, por la paradoja del cumpleaños eniteraciones. Se cree que el mismo análisis se aplica también al algoritmo rho real, pero esta es una afirmación heurística y el análisis riguroso del algoritmo sigue abierto. [ 5 ]
Véase también
Notas
- ↑ Ejercicio 31.9-4 en CLRS ()
Referencias
- ↑ Pollard, JM (1975). "Un método de Monte Carlo para la factorización" (PDF) . BIT Numerical Mathematics . 15 (3): 331– 334. doi : 10.1007/bf01933667 . S2CID 122775546 .
- 1 2 3 Cormen, Thomas H. ; Leiserson, Charles E. ; Rivest, Ronald L. y Stein, Clifford (2009). «Sección 31.9: Factorización de enteros». Introducción a los algoritmos (tercera ed.). Cambridge, MA: MIT Press. págs. 975–980 . ISBN 978-0-262-03384-8.(Esta sección trata únicamente del algoritmo rho de Pollard).
- ↑ Brent, Richard P. (1980). "Un algoritmo de factorización de Monte Carlo mejorado" . BIT . 20 (2): 176– 184. doi : 10.1007/BF01933190 . S2CID 17181286 .
- 1 2 Brent, RP; Pollard, JM (1981). "Factorización del octavo número de Fermat" . Matemáticas de la computación . 36 (154): 627– 630. doi : 10.2307/2007666 . JSTOR 2007666 .
- ↑ Galbraith, Steven D. (2012). "14.2.5 Hacia un análisis riguroso de Pollard rho". Matemáticas de la criptografía de clave pública . Cambridge University Press. págs. 272–273 . ISBN 9781107013926..
Lecturas adicionales
- Bai, Shi; Brent, Richard P. (enero de 2008). "Sobre la eficiencia del método rho de Pollard para logaritmos discretos" . Conferencias sobre investigación y práctica en tecnología de la información, vol. 77. Simposio Australasiano de Teoría (CATS2008). Wollongong. págs. 125-131 . Describe las mejoras que se pueden obtener mediante diferentes funciones de iteración y algoritmos de detección de ciclos.
- Katz, Jonathan; Lindell, Yehuda (2007). "Capítulo 8". Introducción a la criptografía moderna . CRC Press.
- Samuel S. Wagstaff, Jr. (2013). El placer de factorizar . Providence, RI: American Mathematical Society. pp. 135–138 . ISBN 978-1-4704-1048-3.
Enlaces externos
- Artículo completo sobre el algoritmo Rho de Pollard dirigido a un público de nivel introductorio.
- Weisstein, Eric W. "Método de factorización rho de Pollard" . MathWorld .
- Implementación en Java
- Acerca de Pollard rho
- Algoritmos de factorización de enteros