5 M´ etodos de Pollard
5.1 M´ etodo Rho de Pollard
Seja n um n´umero inteiro grande, composto, e p o menor fator primo de n. Vamos considerar uma sequˆencia de inteiros x0, x1, ..., xs n˜ao congruentes 2 a 2, m´odulo n. Se
xi ≡ xj (mod p), com i 6= j, ent˜ao (xi − xj, n) ´e um divisor n˜ao trivial de n. De fato,
p|xi − xj e n ∤ xi − xj. Al´em disso, se (xi − xj, n) = d, ent˜ao d|n e d|xi − xj. Como
p|xi− xj e n ∤ xi− xj, teremos que d 6= n e d ≥ p. Donde d ´e um divisor n˜ao trivial de n.
Proposi¸c˜ao 56. Dados n inteiro e p o menor fator primo de n. Considere x0 um
valor aleat´orio e defina (xk)k≥0 recursivamente como
xk+1 ≡ f(xk) (mod n), com 0 ≤ xk+1 ≤ n − 1.
onde f (x) ´e uma fun¸c˜ao polinomial arbitr´aria com coeficientes inteiros e grau maior que 1. Se xi ≡ xj (mod p)(i, j > 1) ent˜ao a sequˆencia xk se torna peri´odica mod p com um
per´ıodo j − i.
Demonstra¸c˜ao. Utilizando a defini¸c˜ao recursiva de xk temos que se
xi ≡ xj (mod p),
onde p ´e um inteiro positivo, ent˜ao
xi+1 ≡ f(xi) ≡ f(xj) ≡ xj+1 (mod p).
e assim por diante. O que significa que dois termos sempre ser˜ao congruentes quando a diferen¸ca de seus ´ındices for j − i, o que prova nossa tese.
Corol´ario 57. Se a sequˆencia definida acima ´e peri´odica mod p com per´ıodo j − i,
ent˜ao xs≡ x2s (mod p), onde s ´e o menor m´ultiplo de j − i.
Demonstra¸c˜ao. Da hip´otese segue que dois termos de xk sempre s˜ao congruentes mod p,
quando a diferen¸ca entre seus ´ındices for j − i. Assim, teremos que xq ≡ xr (mod p)
sempre que q ≡ r (mod j − i) e q ≥ i e r ≥ j. O que significa que dois termos da sequˆencia xk sempre ser˜ao congruentes m´odulo p quando a diferen¸ca de seus ´ındices for
um m´ultiplo de j − i. Disto, podemos ver que sendo s o menor m´ultiplo de j − i, ent˜ao xs≡ x2s (mod p).
Para encontrar um fator de um inteiro n, utilizando o m´etodo Rho de Pollard, esco- lhemos um valor para x0 e uma fun¸c˜ao como a definida na Proposi¸c˜ao 56, depois achamos
os termos da sequˆencia definida, segundo a f´ormula recursiva dada na mesma proposi¸c˜ao e por ´ultimo calculamos o mdc de x2k − xk e n para k = 1, 2, 3, .... O fator de n ser´a
encontrado quando ocorrer um valor de k para o qual 1 < (x2k− xk, n) < n.
Exemplo 20. Vamos encontrar um fator n˜ao trivial do n´umero n = 8051 utilizando m´etodo Rho, tomando valor inicial x0 = 2 e polinˆomio gerador f (x) = x2+ 1. Nesse caso,
encontraremos a sequˆencia
x1 = 5, x2 = 26, x3 = 677, x4 = 7474, x5 = 2839, x6 = 871, ...
Utilizando o algoritmo de Euclides para calcular o (x2k− xk, n) obtemos (x2− x1, 8051) =
(26 − 5, 8051) = (21, 8051) = 1; (x4− x2, 8051) = (7474 − 26, 8051) = (7448, 8051) = 1;
(x6 − x3, 8051) = (871 − 677, 8051) = (194, 8051) = 97. Ent˜ao, encontramos nesse passo
um fator n˜ao trivial de 8051, que ´e o n´umero 97.
A sequˆencia gerada no exemplo anterior ser´a peri´odica m´odulo p e ter´a per´ıodo 6−3 = 3. Note que x0 ≡ x3 (mod 97); x1 ≡ x4 (mod 97); x2 ≡ x5 (mod 97) e assim por diante.
Observa¸c˜ao. Na pr´atica, o polinˆomio f (x) = x2 + 1 e o valor inicial x
0 = 2 s˜ao
frequentemente escolhidos para gerar a sequˆencia de inteiros xo, x1, x2, ..., xk, ....
O m´etodo Rho ´e pr´atico quando o inteiro a ser fatorado tem fatores primos n˜ao muito grandes.
5.2
M´etodo p-1
Este m´etodo de fatora¸c˜ao, que tˆem como base o Pequeno Teorema de Fermat, nos permite encontar um fator n˜ao trivial de um inteiro n que tem um fator primo p tal que
os fatores de p − 1 s˜ao relativamente pequenos. O m´etodo de Pollard n˜ao funciona bem para qualquer inteiro n, como a maioria dos m´etodos, mas quando ele funciona, ´e muito eficiente. A ideia na qual esse m´etodo se baseia ´e dada pela seguinte proposi¸c˜ao.
Proposi¸c˜ao 58. Sejam n um n´umero inteiro positivo ´ımpar composto e p um fator primo de n. Sejam a e k n´umeros inteiros tais que mdc(a, p) = 1 e p − 1|k. Ent˜ao,
p|mdc(ak− 1, n).
Demonstra¸c˜ao. Por hip´otese, p − 1|k, donde k = k′
(p − 1), para algum inteiro k′. Como
p ´e primo e p ∤ a, segue do Pequeno Teorema de Fermat que ap−1 ≡ 1 (mod p). Elevando
ambos os termos da congruˆencia ao expoente k′ e usando a rela¸c˜ao entre k e k′ obtemos
ak
≡ 1 (mod p), que ´e equivalente a p|ak
− 1. Assim, p ´e fator comum de ak
− 1 e n. Portanto p|mdc(ak
− 1, n).
Para utilizar o m´etodo de Pollard, baseado na proposi¸c˜ao acima, e tentar encontrar um fator primo p de um inteiro composto n, escolhemos inteiros positivos a e k de modo que mdc(a, n) = 1 (o que significa que mdc(a, p) = 1 para todo fator primo p de n) e k seja divis´ıvel por potˆencias de primos pequenos (por exemplo k = mmc(1, 2, 3, ..., B) ou k = B!, para um certo inteiro B). Em seguida, calculamos d = mdc(ak
−1, n) e esperamos encontrar um fator n˜ao trivial de n, conforme a proposi¸c˜ao anterior. Como mdc(a, b) = mdc(b, a mod b), ent˜ao n˜ao ´e necess´ario calcular ak − 1; basta calcular (ak− 1) mod n.
Uma vez calculado d, temos 3 possibilidades.
1. 1 < d < n. Neste caso, d ´e um fator n˜ao trivial de n.
2. d = 1. Este caso ocorre quando p − 1 n˜ao divide k. Devemos ent˜ao aumentar o valor de k e aplicar novamente o m´etodo.
3. d = n. Quando isso ocorre, devemos escolher outro valor para a e come¸car nova- mente.
Portanto, podemos enunciar o m´etodo de Pollard na forma de algoritmo da seguinte maneira.
Algoritmo 59. (Algoritmo p-1 de Pollard) Seja n ≥ 2 um inteiro composto para o
qual desejamos achar um fator primo.
1. Escolha um n´umero k sendo um produto primos pequenos elevados a potˆencias pe- quenas. Por exemplo, considere
para um certo inteiro B.
2. Escolha um inteiro qualquer a tal que 0 < a < n.
3. Calcule mdc(a, n). Se ele ´e estritamente maior que 1, ent˜ao ele ´e um fator n˜ao trivial de n. Da´ı pare. Caso contr´ario v´a para a etapa 4.
4. Calcule d = mdc(ak− 1, n). Se 1 < d < n, ent˜ao d ´e um fator n˜ao trivial de n.
Ent˜ao pare. Se d = 1, volte para a etapa 1 e tome um k maior. Se d = n, volte para a etapa 2 e escolha outro valor para a.
Observa¸c˜ao. Note que o algoritmo de Pollard certamente ir´a parar, pois em certo momento, teremos no passo 1, um valor de B tal que B = 1
2(p − 1) para algum primo p que divide n, e portanto p − 1 certamente dividir´a k, donde ak
− 1 = a(p−1)q − 1 que,
pelo Pequeno Teorema de Fermat, ´e divis´ıvel por p e da´ı d = mdc(ak
− 1, n) ser´a igual a p que nesse caso ´e fator de n . Por exemplo, dado n = 143, pelo m´etodo p − 1, come¸cando com k = 2 e tomando a = 2, obteremos at´e a quarta tentativa mdc(2k− 1, 143) = 1,
s´o que quando chegamos em k = mmc(2, 3, ..., 5) = 60 teremos mdc(260− 1, 143) = 11,
pois 11 ´e um fator de 143, e como 11 − 1 = 10 divide 60, temos tamb´em que 260− 1 ´e
divis´ıvel por 11. No entanto, este processo pode gastar muito tempo e o algoritmo n˜ao ser´a pr´atico para valores grandes de k. O algoritmo s´o roda numa quantidade de tempo razo´avel quando n tem um divisor primo p tal que p − 1 ´e produto de primos pequenos elevados a potˆencias pequenas.
Exemplo 21. Vamos calcular, utilizando o m´etodo p − 1 de Pollard, um fator de n = 35318303.
Primeiramente, vamos supor o n´umero 35318303 composto. Agora vamos encontrar um fator desse n´umero.
Inicialmente, vamos tomar a = 2 e k = mmc(2, 3, ..., 5) = 60. Para facilitar os c´alculos, escrevemos 60 na base 2, obtendo
60 = 25+ 24+ 23+ 22
Calculamos, ent˜ao, os valores 22i
(mod n), 0 ≤ i ≤ 5 , e apresentamo-los na tabela a
i 22i mod 35318303 0 2 1 4 2 16 3 256 4 65536 5 21452633
A partir da tabela calculamos
260= 225+24+23+22 = 225 · 224 · 223 · 222 ≡ 30748919 (mod 35318303)
Utilizando o algoritmo euclidiano obteremos
mdc(260− 1, 35318303) = mdc(30748918, 35318303) = 1
Portanto, para esses valores o teste falha. Isso se deve ao fato de que para nenhum fator primo p de 35318303, teremos que p − 1 divide 60. O que fazemos ent˜ao ´e aumentar o valor de k e esperar que exista um fator primo p de 35318303 tal que p − 1 divida o novo valor de k. Ent˜ao, tomemos k = mmc(2, 3, ..., 7) = 420. Escrevendo 420 na base 2 obtemos
420 = 28+ 27+ 25+ 22
Calculando, os valores de 22i
(mod n) para i = 6, 7, 8 obtemos
i 22i mod 35318303 6 32844765 7 24017239 8 26510038 Da´ı 2420 = 228+27+25+22 = 228 · 227 · 225 · 222 ≡ 2502093 (mod 35318303)
Utilizando o algoritmo euclidiano obteremos
mdc(260− 1, 35318303) = mdc(2502092, 35318303) = 1
e novamente o teste falha.
Vamos tomar agora k = mmc(2, 3, ..., 11) = 27720. Ent˜ao escrevemos esse novo valor de k na base 2 obtendo
27720 = 214+ 213+ 211+ 210+ 26+ 23
Agora, estendemos a tabela, calculando os valores de 22i
(mod n) de que precisamos ob-
tendo i 22i mod 35318303 9 14876672 10 5160260 11 13402447 12 16450291 13 22433108 14 15795689
Utilizando esses valores obtidos podemos calcular 227720 = 2214+213+211+210+26+23
= 2214 · 2213 · 2211 · 2210 · 226 · 223 ≡ 14301996 (mod 35318303)
Agora, usando o algoritmo euclidiano obtemos
mdc(227720− 1, 35318303) = mdc(14301995, 35318303) = 4621
E assim, encontramos, como quer´ıamos um fator n˜ao trivial de 35318303. Al´em disso, fatoramos 35318303 como 4621 ·7643 e cada um destes fatores ´e primo, e assim fatoramos n completamente.
Tivemos sucesso em encontrar um fator n˜ao trivial de n nessa passagem, pelo fato de que o fator p = 4621 encontrado ´e tal que p − 1 = 4620 = 22 · 3 · 5 · 7 · 11 divide
k = 27720 = 23 · 32 · 5 · 7 · 11. Observe tamb´em que como 4621, que ´e um fator de
pequenos, isso nos permitiu fatorar esse n´umero em um tempo razo´avel utilizando esse m´etodo.
Observa¸c˜ao. Existe um outro m´etodo de fatora¸c˜ao de inteiros baseado no M´etodo p − 1. Esse m´etodo ´e devido a H. W. Lenstra, e utiliza curvas el´ıticas. O m´etodo de Lenstra ´e mais vantajoso e eficiente em rela¸c˜ao a qualquer um dos m´etodos estudados nesse trabalho, mas n˜ao ser´a estudado aqui pois exige outros conhecimentos, al´em dos tratados neste trabalho.