Professional Documents
Culture Documents
ONOMA METROPOLITANA
MAESTR
IA EN CIENCIAS
MATEM
n y nos detenemos
si encontramos p
i
tal que n 0(modp
i
).
En el peor caso, la divisi on es un algoritmo costoso. Si se empieza en 2 y se
va subiendo hasta llegar a
n, el algoritmo requiere
(
n)
2
n
ln n
2
divisiones, donde (x) = {q N : es primo y q x.
Este algoritmo es r apido para encontrar factores peque nos de n.
Algoritmo de factorizacion de Pollard
Este algoritmo es bueno para encontrar factores primos peque nos de enteros
que sean compuestos. Fue inventado por John Pollard en 1975.
Sea f : S S una funci on arbitraria de un conjunto de tama no n. Sea
x
0
S, y denimos x
i+1
= f(x
i
). En alg un momento la sucesi on se repite, es
decir se tiene x
i
= x
j
para i = j, y son i, j lo que estamos buscando.
El algoritmo de Pollard busca repeticiones con x
0
= 2, x
i+1
= x
i
2
+1(modp),
donde p es un factor primo de n. Si logramos encontrar x
i
x
j
(modp),
entonces p|(x
i
x
j
, n).
Pero como no conocemos los factores primos de n, lo que hacemos es calcular
x
i+1
x
i
2
+ 1(modn), y calculamos (x
i
x
j
, n) en cada paso.
Si 1 < (x
i
x
2i
, n) < n, entonces hemos encontrado un factor propio de
n y terminamos.
Si (x
i
x
2i
, n) = n, entonces pasamos a x
i+1
y x
2i+2
, y repetimos.
Si (x
i
x
2i
, n) = n, entonces terminamos con fracaso. La probabilidad es
baja, pero si el algoritmo termina con fracaso, podemos tratar de nuevo
con una nueva funcion, por ejemplo f(x) = x
2
+ c, con c = 0, 2.
Ejemplo 0.1 Consideremos n = 385513, empezemos con x
0
= 2; luego
tenemos los siguientes valores donde x
i+1
x
i
2
+ 1(mod385513) y d =
(x
i
x
2i
, 385513)
3
i x
i
x
2i
d
1 5 26 1
2 26 72817 1
3 677 139866 1
4 72817 61930 1
5 355201 103477 1
5 139866 72122 73
Por lo tanto un factor no trivial de n = 385513 es 73.
El algoritmo de Pollard encuentra un factor primo p de n en aproxima-
damente
p operaciones. Por lo tanto si n es compuesto, podemos esperar
que este algoritmo encuentre los factores primos de n en O(n
1
4
) operaciones
modulares, pues como n es compuesto tiene al menos un factor p primo tal
que p <
n, y para encontrar este factor necesitamos
p operaciones, por lo
que para encontrar p necesitamos aproximadamente
p < n
1
4
operaciones.
El algoritmo de Pollard hecho en Mathematica es:
f[x_, n_] := Mod[PowerMod[x, 2, n] + 1, n];
RhodePollard[n_] := Module[{x, y, d},
x = 2;
y = 2;
d = 1;
While[d == 1,
x = f[x, n];
y = f[f[y, n], n];
d = GCD[Abs[x - y], n];];
If[d == n, Print["FRACASO"];,
Print["Un factor de ", n, " es: ", d]];]
Algoritmo p 1 de Pollard
Antes de explicar el algoritmo p 1 de Pollard, veamos las siguientes deni-
ciones:
4
Denici on: Sea B > 0 un entero positivo. Decimos que n es B-homogeneo
B-liso si y solo si para todo n umero primo p, si p|n, entonces p < B.
Denici on: Decimos informalmente que un entero n es homogeneo si es
B-homogeneo para alguna B sucientemente chica.
El algoritmo p 1 de Pollard se usa para encontrar de manera eciente un
factor primo p de un entero compuesto n, con la propiedad de que p 1 es
homogeneo con respecto a alguna cota B relativamente peque na.
La idea detr as del algoritmo es la siguiente: sea Q el mnimo com un m ultiplo
de todos los n umeros p
a
, donde:
1. p es primo, a > 0.
2. p B.
3. p
a
n.
Si p
a
n, entonces alog(p) log(n), y por lo tanto,
a
log(n)
log(p)
qB
qprimo
q
log(n)
log(p)
log(n)
log(q)
, y luego tomamos
Q =
qB
qprimo
q
q
= a
Q
Finalmente, calculamos d = ( 1, n).Si d = 1 o d = n, terminamos el
algoritmo con fracaso. Si 1 < d < n, entonces d es un factor propio de n.
Si n tiene un factor primo p tal que p 1 es B-homogeneo tenemos que para
encontrar los primos menores o iguales a B, que son
B
log(B)
, por lo que para
obtener Q necesitamos
B
log(B)
multiplicaciones, y para calcular a
Q
(modn) y
terminar el algoritmo necesitamos O
Blog(n)
log(B)
multiplicaciones modulares.
En la pr actica se suele elegir B con 10
5
B 10
6
.
Si el algoritmo termina en fracaso con d = 1, entonces podemos buscar pri-
mos q
1
, q
2
, . . . , q
r
mayores que B, tomando y elevando a la q
i
para cada i
sucesivamente, y al nal calcular nuevamente el maximo com un divisor del
resultado menos uno, y n.
Ejemplo 0.2 Consideremos n = 578141, B = 29 y a = 6. Tenemos que
(6, n) = 1.
Los valores de q y
q
estan en la siguiente tabla:
6
q
q
2 19
3 12
5 8
7 6
11 5
13 5
17 4
19 4
23 4
29 3
De aqu Q = 42857, y as a
Q
140533(modn); por lo que (1405331, 578141) =
239.
Por lo tanto 239 es un factor de primo de n.
El algoritmo p 1 de Pollard hecho en Mathematica es:
P1Pollard[n_, B_] := Module[{q, a, al, lq, g},
q = {2};
a = 2;
For[i = 1, i < PrimePi[B],
a = NextPrime[a];
q = Append[q, a]; i++];
lq = q;
For[i = 1, i <= PrimePi[B],
lq[[i]] = Floor[Log[n]/Log[q[[i]]]];
i++];
Q = 1;
For[i = 1, i <= PrimePi[B],
a1 = q[[i]];
b1 = lq[[i]];
Q = Mod[Q*Power[a1, b1], n];
i++];
al = 2;
7
While[al < n,
c1 = PowerMod[al, Q, n];
g = GCD[c1 - 1, n];
If[g == 1, al += al;, Print["Un factor de ", n, " es: ", g];
al = n];];
If[g == 1, Print["FRACASO"];];]
Metodo de diferencia de cuadrados de Fermat
Si podemos expresar n como una diferencia de cuadrados, n = a
2
b
2
, en-
tonces n = (a + b)(a b). Siempre y cuando a b = 1, eso nos da una
descomposici on no trivial de n (asumimos que tanto a como b son enteros
positivos, de manera que a + b nunca vale 1).
En general, si n = ab, con 1 < b < a < n, entonces podemos escribir
ab =
1
2
(a + b)
1
2
(a b)
2
lo cual se puede hacer pues estamos suponiendo que n es impar, por lo que
a, b son impares y as a +b, a b son pares. Eso nos da una factorizacion con
factores propios como diferencia de cuadrados. Es decir. si podemos expresar
n como una diferencia de cuadrados, n = a
2
b
2
, con a b > 1, entonces de
esta diferencia podemos encontrar factores propios de n, entonces es posible
utilizarlos para encontrar una expresi on de n como diferencia de cuadrados.
El metodo de Fermat es entonces buscar cuadrados u y v tales que n = u
2
v
2
;
para ello, tomamos u =
n, y vemos si u
2
n es un cuadrado; si lo es, ya
terminamos; si no lo es, sumamos 1 a u y volvemos a tratar. Continuamos
hasta encontrar la diferencia de cuadrados que nos da una descomposici on
no trivial de n.
Ejemplo 0.3 Consideremos n = 119, y
u
2
n
11 2
2
12 25 5
As n = 12
2
5
2
, por lo que n = (12 + 5)(12 5) = (17)(7)
Por lo tanto los factores no triviales de n = 119 son 7 y 17.
La idea fundamental del metodo de Fermat es la base de la criba cuadr atica
y la criba generalizada sobre el cuerpo de los n umeros, los algoritmos mejor
conocidos para la factorizaci on de semiprimos grandes ((en el peor de los
casos)). La principal mejora de la criba cuadratica sobre la factorizacion de
Fermat es que, en lugar de buscar un cuadrado en la sucesi on de u
2
n, lo que
hace es hallar un subconjunto de elementos de esta sucesion cuyo producto es
un cuadrado, y lo hace de forma muy eciente. El resultado nal es el mismo:
una diferencia de cuadrados modn que, si no es trivial, puede emplearse para
factorizar n.
9