• Nenhum resultado encontrado

Raízes de Polinómios Módulo Primos

3.3 Primos Grandes no “Crivo Quadrático”

4.1.3 Raízes de Polinómios Módulo Primos

Enquanto que na etapa de crivagem do “crivo quadrático” necessitávamos apenas de conhecer as raízes de x2− n módulo cada um dos primos da base de factores utilizada, no “NFS” é

necessário determinar raízes modulares de polinómios com grau ligeiramente superior. Deste modo, é certamente conveniente descrever um algoritmo eficiente para resolver este problema. Como é certamente sabido, o conjunto Zp[x] de todos os polinómios com coeficientes

num dado corpo Zp constitui um domínio euclidiano quando munido das operações normais

de adição e multiplicação modulares de polinómios. Em particular, este facto implica que, dados dois quaisquer polinómios f (x), g(x) ∈ Zp[x] tais que grau(g) ≥ 0, existem q(x),

r(x) ∈ Zp[x] univocamente determinados tais que

f (x) = q(x)g(x) + r(x) com grau(r) < grau(g). (4.2) Assim sendo, e de modo semelhante ao que acontece com os números inteiros, dizemos que

g(x) divide f (x), e escrevemos g(x) | f (x), se e só se f (x) (mod g(x))(def)= r(x) = 0. Ora,

tendo em conta este conceito de divisibilidade podemos naturalmente definir o máximo divisor

comum entre quaisquer dois polinómios de Zp[x] como o polinómio mónico de maior grau que

divide ambos(1).

O nosso estudo sobre raízes de polinómios módulo números primos começa então com uma observação simples: o facto de que, aplicando indutivamente a equação (4.2), se verifica que qualquer polinómio f (x) ∈ Zp[x] pode ser escrito na forma

f (x) = (x − a1)(x − a2) · · · (x − am)g(x) com g(x) ∈ Zp[x], (4.3)

(1)

Este polinómio pode ser facilmente determinado através, por exemplo, do algoritmo descrito em [5, pág. 90].

4. CRIVO DOS CORPOS DE NÚMEROS

onde a1, a2, · · · , am denotam as raízes de f (x) módulo p, caso existam, e g(x) denota um

polinómio de grau maior ou igual a dois e sem qualquer raiz. Este facto é de grande importân- cia no contexto do problema que pretendemos estudar, bem como o é o seguinte resultado: Teorema 4.7. Sep denota um número primo, o polinómio xp−x factoriza-se completamente

em Zp[x] na forma xp− x = p−1 Y a=0 (x − a) .

Demonstração. Por um lado, de acordo com o Teorema 1.18 a congruênciaxp−x ≡ 0 (mod p)

tem no máximop soluções. Assim, e como, por outro lado, de acordo com o Teorema 1.17

cada elemento de Zp é uma solução, conclui-se imediatamente o resultado pretendido.

Com efeito, juntando estas duas observações facilmente se conclui que todas as raízes de um determinado polinómiof (x) ∈ Zp[x] são simultaneamente raízes de

fr(x) = mdc (f (x), xp− x) .

Deste modo, o primeiro passo do nosso algoritmo pode ser efectivamente a substituição de

f (x) por este novo polinómio, com vista a “eliminar” da nossa procura todos os factores de f (x) que não partilham com este qualquer raiz. Assim, concentramo-nos apenas na parte

da factorização def que na prática nos interessa. De facto, de acordo com a equação (4.3)

podemos garantir que o polinómiofr(x) é da forma

fr(x) = (x − a1)(x − a2) · · · (x − am),

ondea1,a2, · · · ,am denotam as raízes de f (x). Ora, analisando com um pouco de cuidado

o polinómioxp− x verificamos também que

xp− x = xxp−12 − 1 xp−12 + 1,

pelo que se fr(x) ≡ 0 (mod p) tiver soluções então fr(x) tem obrigatoriamente raízes em

comum com pelo menos um dos polinómios

x, xp−12 − 1 ou x

p−1

2 + 1.

O primeiro destes casos é de resolução trivial, já que basta verificar se fr(0) ≡ 0 (modp)

e, em caso afirmativo, substituirfr(x) por fr(x)/x na procura pelas restantes raízes. Deste

modo, de agora em diante assumimos quefr(x) tem raízes em comum apenas com algum dos

restantes polinómios da equação anterior. Ora, recordando o Lema 1.22, podemos concluir imediatamente que xp−12 − 1 =Y a∈Zp: ap=1 (x − a) e x p−1 2 + 1 =Y a∈Zp: ap=−1 (x − a).

4.1. CONCEITOS FUNDAMENTAIS

Assim, há grandes hipóteses de que mdcfr(x), x p−1 2 + 1  e mdcfr(x), x p−1 2 − 1  (4.4) sejam factores “não triviais” defr(x), e portanto de que consigamos deste modo “distribuir”

as raízes deste polinómio por dois polinómios de grau inferior, mais simples de analisar. Esta observação sugere então um algoritmo “indutivo” para construir o conjunto das raízes do polinómiof (x) original. No entanto, antes de o apresentar correctamente é conveniente notar

que se as raízes de fr(x) forem todas resíduos quadráticos (ou não-resíduos quadráticos), os

divisores de fr(x) obtidos em (4.4) são efectivamente triviais. Para resolver este problema

podemos escolher de forma aleatória e em cada passo um qualquer 0 ≤a < p e calcular não

(4.4) mas sim mdcfr(x), (x + a) p−1 2 + 1  e mdcfr(x), (x + a) p−1 2 − 1  , (4.5)

já que para a 6= 0 os polinómios (x + a)p−12 ± 1 já admitem como raízes quer resíduos

quadráticos quer não-resíduos quadráticos. Desta forma são maiores as hipóteses de que consigamos efectivamente encontrar as raízes de fr(x) pretendidas.

Seguidamente apresentamos então uma possível descrição algorítmica deste raciocínio:

Algoritmo 4.1: Raízes de Polinómios em Zp[x]

Dados de Entrada: Um polinómiof (x) ∈ Zp[x]

Dados de Saída: O conjunto R de todas as raízes def (x) em Zp

(1) Sef (x) for da forma x − a para algum a ∈ Zp devolver R = {a}.

(2) Definir R = ∅ efr(x) = mdc (f (x), xp− x).

(3) Sefr(x) = 1 devolver R.

(4) Sefr(0) ≡ 0 (modp) fazer R = R ∪ {0} e fr(x) = fr(x)/x.

(5) Definirr(x) = 1 e enquanto r(x) = 1 ou r(x) = fr(x) fazer

(6) Escolher 0 ≤a < p de forma aleatória e definir g(x) = (x + a)p−12 − 1.

(7) Determinarr1(x) = mdc (fr(x), g(x)) e r2(x) = fr(x)/r1(x).

(8) Devolver R = R S

Algoritmo4.1 (r1(x)) S Algoritmo4.1 (r2(x)).

Exemplo 4.8. Tendo em vista exemplificar o funcionamento do Algoritmo 4.1, suponhamos que pretendíamos determinar todas as raízes de

f (x) = x5+ 15x3+ 18x2+ 14x + 17 ≡ 0 (mod 19).

4. CRIVO DOS CORPOS DE NÚMEROS

Naturalmente, ao iniciar o algoritmo notamos quef (x) não é da forma x − a, pelo que temos

necessariamente que prosseguir. Deste modo, definimos R = ∅ e tomamos o novo polinómio

fr(x) como sendo

fr(x) = mdc



x5+ 15x3+ 18x2+ 14x + 17, x19− x=x3+x2+ 14x + 17.

Reflectindo um pouco sobre este resultado verificamos que ao tomar o máximo divisor comum entre os dois referidos polinómios foi efectivamente ignorada a parte da factorização def (x)

em polinómios irredutíveis, correspondente ao polinómiox2+ 1 (o qual, com efeito, não tem

qualquer raiz módulo 19, uma vez que−119= −1). Ainda assim, temos que prosseguir com o algoritmo uma vez que não conhecemos ainda qualquer raiz de f (x).

No segundo passo escolhemos entãoa = 0, um valor que, tomando

mdcx3+x2+ 14x + 17, x19−12 − 1 

,

conduz à obtenção do divisor trivial 1. Deste modo, podemos concluir que de facto todas as raízes de f (x) (e, consequentemente, de fr(x)) são não-resíduos quadráticos módulo 19.

Assim sendo, temos que repetir este passo, escolhendo agora, por exemplo,a = 1. Com esta

escolha dea verifica-se efectivamente

mdcx3+x2+ 14x + 17, (x + 1)19−12 − 1=x + 16,

o que nos permite concluir imediatamente que r1 = −16 ≡ 3 (mod 19) é uma das raízes de

f (x) módulo 19. Posto isto, aumentamos o conjunto R, o qual passa a ser igual a R = {3}.

Ora, dividindofr(x) por x + 16 obtemos o novo polinómio

fr(x) = x2+ 4x + 7,

ao qual aplicamos o mesmo processo com uma nova escolha dea. De facto, escolhendo agora a = 2 obtemos

mdcx2+ 4x + 7, (x + 2)19−12 − 1 

=x + 17,

concluindo assim quer2= −17 ≡ 2 (mod 19) é outra das raízes def (x). Como consequência,

modificamos conjunto R para R = {2, 3}. Por outro lado, o polinómio que se obtém dividindo fr(x) por x + 17 é também ele de grau um (nomeadamente o polinómio x + 6), admitindo

como raizr3 = −6 ≡ 13 (mod 19). Deste modo, podemos concluir que já encontrámos todas

as raízes def (x), e portanto que

R = {2, 3, 13}, verificando-se de factof (2) ≡ f (3) ≡ f (13) ≡ 0 (mod 19).