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).