• Nenhum resultado encontrado

Congruˆ encias e aritm´ etica modular

No documento Caráter Primo em Larga Escala (páginas 36-40)

2 Algebra Abstrata e Teoria dos ´

2.3.3 Congruˆ encias e aritm´ etica modular

}

return p;

Pode-se mostrar (2) que o tempo de execu¸c˜ao desse algoritmo ´e O(n log log n); visto de outra maneira, o custo amortizado do algoritmo para cada inteiro na faixa de 1 a n ´e O(log log n). Ainda assim, esse custo ´e muito alto, exceto para pequenos valores de n (at´e 10 ou 11 d´ıgitos).

2.3.3 Congruˆencias e aritm´etica modular

Defini¸c˜ao 2.3.5. Seja n um inteiro positivo, e a, b dois inteiros quaisquer. Diz-se que a ´e congruente a b m´odulo n, e escreve-se a ≡ b (mod n), se a e b apresentam o mesmo resto ap´os divis˜ao por n.

Teorema 2.3.8. Para um dado n ≥ 1, temos que a ≡ b (mod n) se e somente se n | (a − b).

Lema 2.3.9. Para um dado n ≥ 1, temos que

1. a ≡ a (mod n) para todos os inteiros a; 2. se a ≡ b (mod n), ent˜ao b ≡ a (mod n);

3. se a ≡ b (mod n) e b ≡ c (mod n), ent˜ao a ≡ c (mod n).

Este lema estabelece que a congruˆencia ´e uma rela¸c˜ao de equivalˆencia, por satisfazer os axiomas de reflexividade, simetria e transitividade. Assim, Z ´e particionado em classes de equivalˆencia disjuntas, representadas pelas classes de congruˆencia

Cada classe corresponde aos poss´ıveis restos r = 0, 1, . . . , n − 1 da divis˜ao de um inteiro por n, de modo que h´a n classes de congruˆencia, mais especificamente

0 = {. . . , −2n, −n, 0, n, 2n, . . .}.

1 = {. . . , −2n + 1, −n + 1, 1, n + 1, 2n + 1, . . .}, . . .

n − 1 = {. . . , −n − 1, −1, n − 1, 2n − 1, 3n − 1, . . .}.

O conjunto de classes de equivalˆencia m´odulo n ´e denotado por Z/nZ. ´E poss´ıvel definir uma aritm´etica desse conjunto da seguinte forma:

a + b = a + b, a − b = a − b,

ab = ab.

O lema a seguir afirma que essas opera¸c˜oes s˜ao bem-definidas.

Lema 2.3.10. Para um dado n ≥ 1, se a0 ≡ a (mod n) e b0 ≡ b (mod n), ent˜ao a0+ b0 ≡ a + b (mod n), a0 − b0 ≡ a − b (mod n) e a0b0 ≡ ab (mod n).

O conjunto Z/nZ e as opera¸c˜oes aritm´eticas assim definidas formam um anel (quando n n˜ao ´e primo ou potˆencia de primo) ou um corpo.

Deve-se prestar aten¸c˜ao `a defini¸c˜ao de exponencia¸c˜ao. Aplicando a defini¸c˜ao de mul-tiplica¸c˜ao de classes de congruˆencia, obt´em-se ak = ak. Deve-se observar que, em geral, ak 6= ak; mas nem tudo est´a perdido com rela¸c˜ao ao c´alculo eficiente de exponencia¸c˜oes. Ser´a visto mais `a frente que, de fato, ´e poss´ıvel efetuar redu¸c˜oes modulares neste expoente, desde que se escolha o m´odulo correto pelo uso do Teorema 2.3.19.

Embora, `a primeira vista, opera¸c˜oes de exponencia¸c˜ao ak (sejam exponencia¸c˜oes mo-dulares ou n˜ao) pare¸cam exigir k−1 multiplica¸c˜oes, existem algoritmos que exigem apenas O(log k) multiplica¸c˜oes. A literatura sobre estes algoritmos ´e rica (bons pontos de par-tida s˜ao (1, 5)), mas neste cap´ıtulo mencionamos apenas um dos algoritmos mais simples, conhecido como exponencia¸c˜ao esquerda-direita. Decidiu-se abordar este algoritmo, ao inv´es de sua vers˜ao sim´etrica direita-esquerda, por haver uma certa vantagem na situa¸c˜ao em que a ´e um inteiro pequeno como 2 ou 3, em que ´e poss´ıvel substituir a opera¸c˜ao de multiplica¸c˜ao por a por adi¸c˜oes.

Algoritmo 2.3.4 (Exponencia¸c˜ao esquerda-direita). Esse algoritmo calcula ak, k > 0, onde k ´e fornecido ao algoritmo na forma de um vetor de 0 a D − 1 contendo sua expans˜ao bin´aria, com k[D − 1] = 1 o bit mais significativo.

1. [Inicializa¸c˜ao] z = a;

2. [La¸co sobre os bits de k, a partir do segundo mais significativo] for (D − 2 ≥ j ≥ 0) { z = z2; if (k[j] == 1) z = za; } return z;

Para o c´alculo de exponencia¸c˜oes modulares, o algoritmo ser´a mais eficiente se as opera¸c˜oes de multiplica¸c˜ao forem seguidas por redu¸c˜oes modulares, mantendo os valores das vari´aveis estritamente menores que o m´odulo.

A divis˜ao de classes de congruˆencia n˜ao pode ser definida como a/b = a/b, visto que a/b n˜ao necessariamente assume valor inteiro. Ao inv´es disso, ser˜ao consideradas as solu¸c˜oes da equa¸c˜ao bx ≡ a (mod n). Pelo Teorema 2.3.8, isso equivale a dizer que n | (bx − a), ou seja, bx − a = ny. Equa¸c˜oes deste tipo j´a foram estudadas pelo Teorema 2.3.4, e suas solu¸c˜oes podem ser obtidas de maneira eficiente pelo Algoritmo 2.3.2. Um corol´ario do Teorema 2.3.4, empregando os conceitos de congruˆencia, ´e ´util nesta situa¸c˜ao: Corol´ario 2.3.11. Se mdc(b, n) = 1, ent˜ao as solu¸c˜oes da congruˆencia bx ≡ a (mod n) para x formam uma ´unica classe de congruˆencia m´odulo n.

Esse corol´ario indica as situa¸c˜oes em que faz sentido definir o quociente de classes de congruˆencia; especificamente, quando o divisor b ´e coprimo ao m´odulo n. Quando esta condi¸c˜ao n˜ao ´e verdadeira, e d | a, h´a mais de uma solu¸c˜ao para a congruˆencia, enquanto se d - a, a congruˆencia n˜ao possui solu¸c˜ao. Em ambos os casos, n˜ao ´e possivel definir um quociente a/b.

Uma defini¸c˜ao de amplo uso, e relacionada aos quocientes de classe de congruˆencia, ´e a invers˜ao de classes de congruˆencia.

Defini¸c˜ao 2.3.6. O inverso a−1 de uma classe de congruˆencia a m´odulo n ´e a solu¸c˜ao x da equa¸c˜ao ax = 1, ou na nota¸c˜ao da aritm´etica modular, ax ≡ 1 (mod n).

Ap´os este breve interl´udio ao t´opico de divis˜ao de classes de congruˆencia, retornamos ao estudo da aritm´etica destas classes. O Lema 2.3.10 pode ser interpretado da seguinte maneira: a aritm´etica de classes de congruˆencia depende apenas das classes de congruˆencia em quest˜ao, e n˜ao do representante particular escolhido para aquela classe. Surge ent˜ao a quest˜ao de como escolher os representantes mais adequados para maximizar a eficiˆencia da implementa¸c˜ao da aritm´etica modular. As duas possibilidades mais comuns s˜ao o conjunto de res´ıduos n˜ao-negativos m´ınimos, dado por {0, 1, . . . , n − 1}, e o conjunto de res´ıduos de menor valor absoluto, dado por {0, ±1, ±2, . . . , ±(n − 1)/2} para n ´ımpar e {0, ±1, ±2, . . . , ±(n/2 − 1), n/2} para n par (o ´ultimo elemento pode ser substitu´ıdo por −n/2 se desejado).

As defini¸c˜oes e resultados obtidos at´e agora sugerem a implementa¸c˜ao da aritm´etica modular atrav´es da aritm´etica de inteiros e aplica¸c˜ao do algoritmo de divis˜ao. Existe um sistema alternativo de aritm´etica modular para o caso em que n ´e composto (1, 5). Para introduzi-lo, ´e necess´ario o teorema a seguir.

Teorema 2.3.12. Seja n um inteiro com fatora¸c˜ao em potˆencias de primos n = pe1

1 · · · pek

k ,

onde p1, . . . , pk s˜ao primos distintos. Dados inteiros a e b, temos que a ≡ b (mod n) se e somente se a ≡ b (mod pei

i ) para i = 1, . . . , k.

Este resultado, em conjunto com o Lema 2.3.10, sugere a realiza¸c˜ao da aritm´etica m´odulo os diferentes fatores primos de n; esse procedimento pode ser vantajoso em al-gumas situa¸c˜oes. ´E necess´ario, no entanto, um m´etodo para obten¸c˜ao da classe de con-gruˆencia m´odulo n dadas as classes de congruˆencia m´odulo cada fator primo de n. O seguinte teorema garante a existˆencia e unicidade da solu¸c˜ao para esse problema.

Teorema 2.3.13 (Teorema Chinˆes do Resto). Sejam n1, . . . , nk inteiros positivos tais que mdc(ni, nj) = 1 para i 6= j, e sejam a1, . . . , ak inteiros quaisquer. Ent˜ao a solu¸c˜ao das congruˆencias simultˆaneas

x ≡ a1 (mod n1), . . . , x ≡ ak (mod nk)

forma uma ´unica classe de congruˆencia m´odulo n, onde n = n1· · · nk. Ademais, esta solu¸c˜ao ´e dada por

x ≡

k

X

i=1

onde ci = n/ni e di ≡ c−1i (mod ni). Z/nZ

No documento Caráter Primo em Larga Escala (páginas 36-40)

Documentos relacionados