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