• Nenhum resultado encontrado

M´ etodo Rho de Pollard

No documento FATORAÇÃO DE INTEIROS (páginas 55-62)

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 kobtemos

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.

No documento FATORAÇÃO DE INTEIROS (páginas 55-62)

Documentos relacionados