Você está na página 1de 18

1

A teoria dos nmeros a parte na matemtica que envolve o estudo dos nmeros inteiros
e suas propriedades. Comeamos explorando a noo de divisibilidade. A diviso de um
nmero inteiro por um nmeros inteiro resulta em um quociente e um resto. Trabalhar
com esses restos conduz a aritmtrica modular.
As ideias desenvolvidas dentro da teoria dos nmeros abrange uma gama de aplicaes
dentro da cincia da computao e da matemtica de um modo geral.

Divisibilidade

Quando um nmero inteiro b dividido por um segundo nmero inteiro a, o resultado


pode ou no ser um nmero inteiro.
Exemplo 1
4
13
=2 e
= 3, 25
2
4
O resultado de uma diviso chamado quociente. Se o quociente for inteiro dizemos
que a diviso exata, se no, a diviso no exata. Contudo, estamos trabalhando apenas
com nmeros inteiros, portanto, quando a diviso no for exata, o resultado um quociente
inteiro e um resto inteiro diferente de zero. Na diviso de 13/4, o quociente 3 e o resto
1, pois 13 3 4 = 1. Isso nos leva a primeira definio.
Definio 1 (Divisibilidade) Se a e b so nmeros inteiros com a 6= 0, dizemos que a
divide b, se houver um nmero inteiro de modo que b = ac. Quando a divide b dizemos
que a um fator de b e b mltiplo de a. A notao a|b indica a divide b. Escrevemos
a 6 | b quando a no divide b. Representamos a divisibilidade conforme mostrado.

a|b

b
=c
a

Usando quantificadores a definio ?? fica, c(ac = b), onde o universo de discurso o


conjunto dos inteiros.
Vamos verificar algumas propriedades de divisibilidade. Sejam a, b e c nmeros inteiros,
se a|b e a|c, ento, s(b = as) e t(c = ta). Assim,
b+c
=s+t
a
b = as nb = as para todo n

b + c = as + at b + c = a(s + t)

Se ab$ e $bc, ento, s(b = as) e t(c = bt), assim, c/t = as, portanto c/a = st.
Como a, b, c, s e t so inteiros, s + t, ast e st tambm so. Assim, podemos resumir esses
resultados no primeiro teorema usando a notao da definio ??.
Teorema 1 Sejam a, b e c nmeros inteiros,
1. Se a|b e a|c, ento a|(b + c);
2. Se a|b, ento a|bn para todo inteiro n;
3. Se a|b e b|c, ento a|c.

2
Pela regra 2 do teorema ?? temos que se a|b e a|c, ento a|mb e a|nc para todo inteiro
m e n. Esse fato leva ao primeiro corolrio.
Corolrio 1 (Corolrio) Se a, b e c so nmeros inteiros tal que a|b e a|c, ento a|(mb+
nc) sempre que m e n so nmeros inteiros. (De acordo com a regra 1 e 2 do teorema ??).
Quando um nmero inteiro b dividido por um nmero inteiro positivo a, o resultado
um quociente k. Se a diviso no for exata, h tambm um resto diferente de zero.
a|b

b
b
=k+r
a
a

Teorema 2 (O Algoritmo de Diviso) Considere b um nmero inteiro e a um inteiro


positivo. Ento haver nmeros inteiros q e r, nicos, com 0 r a, tal que b = qa + r.
O teorema (??) no exatamente um algoritmo porque no apresenta uma sequencia
de passos. No entando usamos a nomenclatura tradicional.
Definio 2 Na equao dada no algoritmo de diviso, a chamado de divisor, b
chamado de dividendo, q chamado de quociente e r chamado de resto. Usamos
uma notao especial para expressar o quociente e o resto:
q = b div a, r = b mod a
Trabalhar com restos nos leva ao segundo tpico introdutrio da Teoria dos Nmeros,
a Arittica Modular.

1.1

Aritmtica Modular

Em algumas situaes o que interessa no resultado de uma diviso no o quociente,


mas o resto. Imagine que queremos saber se um nmero par, basta dividi-lo por 2, se o
resta for nulo ento ele par. O estudo da Aritmtica Modular conduz a uma serie de
aplicaes dentro da Cincia da Computao que seram discutidos mais adiante.
Quando dois nmeros inteiros tm o mesmo resto quando divididos pelo mesmo nmero,
dizemos que esses nmeros so congruentes.
Teorema 3 Considere a e b como nmeros inteiros e m como inteiro positivo. Ento, se
a mod m b mod m, dizemos que a e b so congruentes.
Conforme o teorema ??, o teorema acima pode ser expresso como:
a
b
= q1 + r,
= q2 + r
m
m
Subtraindo a primeira da segunda obtemos:
a
b
ab

= q1 + q2
=q
m m
m

(1)

Sendo q o quociente da diviso de a b por m. Assim, de acordo com o teorema ?? esse


resultado conduz a prxima definio.

3
Definio 3 Se a e b forem nmeros inteiros e m for um nmero inteiro positivo, ento
a congruente a b modulo m se m|a b. Usamos a notao a b(mod m) para indicar
congruncia. Se a e b no forem congruentes a m, escrevemos a 6 b(mod b).
O teorema ?? e a definio ?? diz que se os restos da diviso de dois nmeros inteiros
pelo mesmo nmero inteiro m forem iguais, esses nmeros so congruentes. De acordo
com a equao ??, obtemos o teorema a seguir.
Teorema 4 Considere m como um inteiro positivo. Os nmeros inteiros a e b so
congruentes a m q(a = mq + b).
O conjunto de todos os inteiros congruentes ao modulo m chamado de classe de
congruncia de modulo m.
Considere que a congruente a b modulo m e c congruente a d modulo m, isto ,
a b(mod m) e c d(mod m), sendo m inteiro positivo. Assim, segundo o teorema ??
b = sm + a e d = tm + c, sendo s e t inteiros. Efetuando as operaes b + d e b d obtemos,
b + d = a + c + m(s + t)
(b + d) (a + c) = m(s + t)

b d = (sm + a) (tm + c)
b d = ac + m(at + sc + stm)
bd ac = m(at + sc + stm)

Portanto, de acordo com a definio ?? podemos anunciar o prximo teorema.


Teorema 5 Seja m um inteiro positivo. Se a b(mod m) e c d(mod m), ento,
a + c b + d(mod m) e ac bd(mod m)

Os nmeros inteiros e os algoritmos

Nessa captulo sera apresentado como os nmeros naturais so representados em uma


base qualquer e sera destacado situaes especiais nas bases 10 e 2. A questo que norteia
a primeira seo : Dado um nmero natural como obter a sua expanso em uma base b?
Os nmeros na base decimal (base 10) so representados por uma sequncia de algarismo
de 0 a 9, que servem para contar unidades, dezenas, centenas, milhares, dezenas de milhar,
etc da direita para a esquerda.
Em algumas situaes conveniente usar bases diferentes de 10. Por exemplo os
computadores usam a base 2 quando trabalhm com aritmtica, e a notao octal (base
8) ou hexadecimal (base 16) quando representam caracteres. Mas pode-se usar qualquer
nmero inteiro positivo maior que 1 como base.
Para exemplificar vamos supor o nmero 2015, este tera a seguinte representao na
base 10:
2 103 + 0 +1 101 + 5 100 ,
onde o dgito 5 o dgito das unidades, 1 o dgito das dezenas, 0 o dgito das centenas e
2 o dos milhares. Logo pode-se representar um nmero natural n em uma base b, com
b > 0, como mostrado no teorema 1.
Teorema 6 Considere b como um nmero inteiro positivo maior que 1. Ento, se n for
um nmero inteiro positivo, pode ser expresso unicamente na forma
n = ak bk + ak1 bk1 + + a0 b0

(2)

4
em que k um inteiro nao negativo, a0 , a1 , , ak so nmeros inteiros no negativos
menores que b e ak 6= 0.
A representao de n no Teorema 1 chamada de expanso de n na base b. A expanso
na base b de n indicada por (ak ak1 a1 a0 )b .
Por exemplo, (45)8 representa 481 +580 = 37. Outro exemplo que podemos considerar
a transformao de (11)10 na base 10 para a base 2:
Dividendo
11
5
2
1

Divisor
2=
2=
2=
2=

Quociente
5
2
1
0

Resto
1
1
0
1

Assim o nmero (11)10 representado na base 2 por (1011)2 .


No algoritmo 1 apresentado o pseudocdigo para encontra a expanso na base b do
nmero inteiro n (escrito na base 10). No algoritmo 1, q representa o quociente obtido
pelas divises sucessivas por b, comeando com q = n. Os dgitos das expanses na base b
so os restos dessas divises e so dados por q mod b. O algoritmo termina quando um
quociente q = 0 alcanado.
Algoritmo 1 Construo de expansso na base b
expanso na base b(n: inteiro positivo)
qn
k0
enquanto q 6= 0 faa
ak q mod b
q q/b
k k+1
fim enquanto

2.1

Potenciao Modular

Em criptografia, importante saber como encontrar dn mod m de maneira eficiente,


em que d, n e m so nmeros inteiros grandes. invivel computar primeiro dn e
depois encontrar seu resto quando dividido por m, pois dn ser um nmero muito grande.
Assim para reduzir esse custo, realiza-se uma expanso binria (base 2) do expoente
n. Logo pode-se utilizar um algoritmo para realizar a expanso binria do expoente
n, isto , n = (ak1 a1 a0 )2 . Como definido anteriormente no teorema 1, sabe-se que
n = ak bk + ak1 bk1 + + a0 b0 , neste caso b = 2 portanto,
k1 +a 2+a
1
0

dn = dak1 2

A ideia aqui , para computar dn , encontra-se os valores de d, d2 , (d2 )2 = d4 , (d4 )2 =


d , , d2k . Por exemplo para computar 311 , primeiro nota-se que 11 = (1011)2 logo,
8

41 +0242 +12+1

311 = 312

5
311 = 32

3 +2+1

311 = 38+2+1
ou ainda, 311 = 38 32 31 . Assim elevando ao quadrado sucessivamente, percebe-se que
32 = 9, 34 = 92 = 81, e 38 = (81)2 = 6561. Logo 311 = 38 32 31 = 6561 9 3 = 177147.
A ideia do algoritmo de potenciao modular encontra sucessivamente d mod m,
2
d mod m, d4 mod m, , d2k1 mod m. E multiplicar esses termos junto com d2j mod
m, onde aj = 1, encontrando o resto do produto quando dividido por m depois de cada
multiplicao.
Para isso, o algoritmo leva em conta que ak dk mod m, pois sabendo que a
d mod m verdade, tem-se que
a = d + sm
a d = sm
ak dk = (a d)(ak1 + ak2 d + + adk2 + dk1 )
(ak dk ) tambm multiplo de m.
ak dk mod m
Por exemplo considere que deseja-se calcular 540 mod 7 tem-se que:
51 mod 7 = 5
52 mod 7 = (51 mod 7)2 mod 7 = 4
54 mod 7 = (52 mod 7)2 mod 7 = 42 mod 7 = 2
58 mod 7 = (54 mod 7)2 mod 7 = 22 mod 7 = 4
516 mod 7 = (58 mod 7)2 mod 7 = 42 mod 7 = 2
532 mod 7 = (516 mod 7)2 mod 7 = 22 mod 7 = 4
Podemos rescrever 540 = 532 58 , pois sabendo que (40)10 = (101000)2 . Logo temos
que a expanso binria do expoente dado por
61 +0262 +1263 +0264 +0265 +0266

540 = 512

540 = 532 58
De acordo com o teorema 1.5 temos que ab mod m = ((a mod m)(b mod m)) mod m.
Portanto,
540 mod 7 = ((532 mod 7) (58 mod 7)) mod 7
540 mod 7 = 4 4 mod 7
540 mod 7 = 16 mod 7 = 2
Vamos simular o algoritmo considerando agora que deseja-se calcular 3644 mod 645,
portanto b = 3, m = 645, e n ser a expanso binrio do valor 644, logo n = 1010000100,
e k ser a quantidade de bits.
Inicialmente x = 1, potencia = 3 mod 645 = 9. No lao de repetio para temos: O
algoritmo produz como resultado 3644 mod 645 = 36. Portanto,
3644 = 3512 3128 34

6
i
i
i
i
i
i
i
i
i
i

=
=
=
=
=
=
=
=
=
=

0
1
2
3
4
5
6
7
8
9

a0
a1
a2
a3
a4
a5
a6
a7
a8
a9

=
=
=
=
=
=
=
=
=
=

0
x=1
potencia = 32 mod 645 =9
0
x=1
potencia = 92 mod 645 = 81
1
x=(181)mod 645=81 potencia = 812 mod 645 = 111
0
x=81 potencia = 1112 mod 645 = 66
0
x=81 potencia = 662 mod 645 = 486
0
x=81 potencia = 4862 mod 645 = 126
0
x=81 potencia = 1262 mod 645 = 396
1 x=(81396)mod 645=471 potencia = 3962 mod 645 = 81
0
x=471 potencia = 812 mod 645 = 111
1 x=(471111)mod 645=36 potencia = 1112 mod 645 = 66

3644 mod 645 = ((3512 mod 645) (3128 mod 645) (34 mod 645)) mod 645
3644 mod 645 = (111 396 81)mod645
3644 mod 645 = 36

Algoritmo 2 Potenciao Modular


potenciacao modular(b: inteiro, n: expanso binaria do expoente, m: inteiro positivo)
x1
potencia b mod m
para i 0 at k-1 faa
se ai = 1 entox (x.potencia) mod m
potencia (potencia.potencia) mod m
fim se
return x (x igual a bn mod m)
fim para

Os nmeros primos, os mximos divisores comuns


e o mnimo mltiplo comum

Nesta seo sera discutido os nmeros primos, pois esses so essenciais nos sistema de
criptografia. Um nmero primo um nmero inteiro maior que 1 que somente divisvel
por 1 e por ele mesmo.
Tambm sera discutido os mximos divisores comuns de dois nmeros inteiros, bem
como o mnimo mltiplo comum de dois nmeros inteiros.

3.1

Nmeros primos

Um nmero inteiro positivo p maior que 1 chamado de primo se e somente se os


fatores positivos de p forem 1 e p. Isto , se p divisvel por ele mesmo e 1. Um nmero
que maior que 1 e que no primo chamado de composto 1 .
Exemplo: O nmero 7 um nmero primo pois ele s divisvel por ele mesmo e 1,
isto , seus fatores positivos so 1 e 7.
Teorema 7 O teorema fundamental da aritmtica
Todo nmero inteiro positivo maior que 1 pode ser escrito unicamente como primo ou
como o produto de dois ou mais primos, em que o valor dos fatores primos so escritos
em ordem no decrescente de tamanho.
Por exemplo os nmeros 100, 641 e 999 podem ser escritos unicamente como:
100 = 2 2 5 5 = 25 52
641 = 641
999 = 3 3 3 37 = 33 37
Muitas vezes, importante saber se um determinado nmero inteiro primo. Por
exemplo, em criptologia, os primos so utilizados em mtodos para fazer mensagens
secretas. H um procedimento para mostrar que um nmero inteiro primo. Como segue
no teorema:
Teorema
8 Se n um nmero inteiro composto, ento n tem um divisor primo menor
ou igual a n.
Demonstrao: Se n composto, pela definio de um nmero inteiro composto sabemos
que n tem um fator a com 1 < a < n. Assim, pela definio de fator de um nmero
inteiro positivo, temos
que n=ab, em
que b um
nmerointeiro positivomaior
que 1.
Mostraremos que a n ou b n. Se a > n e b >
n ento ab > n n = n
que uma contradio. Consequentemente, a n ou b n. Comoambos, a e b, so
divisores de n, vemos que n tem um divisor positivo no excedente a n. Este divisor
primo ou, pelo teorema fundamental da aritmtica, tem um divisor
primo menor que ele
mesmo. Neste caso, n tem um divisor primo menor ou igual a n.

Por exemplo mostre que 101 primo: Os nicos primos no excedentes a 101 so 2,
3, 5 e 7. Como 101 no divisvel por esses nmeros, temos que 101 primo.
1

O nmero inteiro n composto se e somente se houver um nmero inteiro a, tal que a | n e 1 < a < n.

8
Teorema 9 O teorema do nmero primo
A razo do nmero de primos no excedente a x e
limitante.

x
ln x

tende a 1 quando x cresce sem

O teorema do nmero primo foi demonstrado pela primeira vez em 1896 pelo matemtico
francs Jacques Hadamard e pelo matemtico belga Charles-Jean-Gustave-Nicholas de
la Valle-Poussin, usando a teorema das variveis complexas. Pode-se usar o teorema do
nmero primo para estimar a probabilidade de um nmero escolhido aleatoriamente ser
primo. Usando esse teorema possvel mostrar
que a probabilidade de um nmero inteiro
n
ln n
n ser primo , tambm aproximadamente n . Por exemplo, a probabilidade de um nmero
inteiro prximo de 101000 ser primo aproximadamente ln 1011000 , que aproximadamente
1
.
2300
A fatorao e o teste para verificar se um nmero primo tornaram-se importantes
nas aplicaes da teoria dos nmeros para a criptografia. Isto levou a um grande interesse
em desenvolver algoritmos eficientes para as duas tarefas. H um grande esforo para
fatorar nmeros grandes, especialmente os com o formato k n 1, em que k um inteiro
positivo pequeno e n um nmero inteiro positivo grande, esses nmeros so chamados de
Cunningham.

3.2

Os mximos divisores comuns

O maior nmero inteiro que divide dois nmeros inteiros chamado de mximo divisor
comum desses inteiros.
Considere a e b como nmeros inteiros diferentes de zero. O maior nmero inteiro d,
tal que d|a e d|b chamado de mximo divisor comum de a e b. O mximo divisor comum
de a e b indicado por mdc(a,b).
O mximo divisor comum de dois nmeros inteiros, diferentes de zero, existe porque
o conjunto dos divisores comuns desses inteiros finito. Uma maneira de encontrar o
mximo divisor comum de dois nmeros inteiros encontrar os divisores positivos comuns
a ambos os inteiros e ento pegar o maior divisor. Por exemplo os divisores positivos
comuns de 24 e 36 so 1, 2, 3, 4, 6 e 12. Assim mdc(24,36) = 12.
Quando dois nmeros inteiros no tm divisor positivos comum alm do 1, eles so
relativamente primos. Ou seja os nmeros inteiros a e b so relativamente primos, ou
primos entre si, se o mximo divisor comum deles for 1. Por exemplo 17 e 22 so primos
entre si, pois mdc(17,22) = 1.
Precisamos especificar se cada par de nmeros inteiros em um conjunto de inteiros no
tem um divisor positivo comum alm de 1: Os nmeros inteiros a1 , a2 , , an so pares
relativamente primos, ou primos entre si dois a dois, se mdc(ai, aj) = 1 sempre que 1 i
< j n.
Outra maneira de encontrar o mximo divisor comum de dois nmeros inteiros usar
a fatorao desses inteiros. Suponha que as fatoraes em nmeros primos dos inteiros a e
b, diferente de zero, so
a = pa11 pa22 pann ,

b = pb11 pb22 pbnn ,

em que cada expoente um nmero inteiro no negativo e todos os primos que aparecem na
fatorao em nmeros primos de a ou b esto inclusos nas duas fatoraes, com expoente
zero se necessrio. Ento, mdc(a,b) dado por

min(a1 ,b1 ) min(a2 ,b2 )


p2

mdc(a, b) = p1

pm in(an , bn )n

em que min(x, y) representa o menor entre os nmeros x e y. Para declarar que esta
frmula para mdc(a,b) vlida, devemos mostrar que o nmero inteiro do lado direito
divide a e b e que nenhum inteiro maior divide. Este inteiro divide a e b porque a potncia
de cada primo na fatorao no excede a potncia deste primo na fatorao de a nem de b.
Alm disso, nenhum nmero inteiro maior pode dividir a e b, porque os expoentes dos
nmeros primos nesta fatorao no podem ser aumentados e nenhum primo pode ser
includo.
Exemplo: Como a fatorao em nmeros primos de 120 e 500 ,
120 = 23 3 5
500 = 22 53
o mximo divisor comum
mdc(120, 500) = 2min(3,2) 3min(1,0) 5m in(1, 3) = 22 30 51 = 20
A fatorao em nmeros primos tambm pode ser usada para encontrar o mnimo
mltiplo comum de dois nmeros inteiros.

3.3

O mnimo mltiplo comum

O mnimo mltiplo comum dos nmeros inteiros positivos a e b o menor inteiro


positivo divisvel por ambos, a e b. O mnimo mltiplo comum de a e b indicado por
mmc(a,b).
O mnimo comum existe porque o conjunto dos nmeros inteiros divisveis por a e b no
vazio e todo conjunto de nmeros inteiros positivos no vazio tem um menor elemento.
O mnimo mltiplo comum de a e b dado por
max(a1 ,b1 ) max(a2 ,b2 )
p2

mmc(a, b) = p1

n ,bn )
pmax(a
n

em que max(x, y) indica o mximo de dois nmeros x e y. Esta frmula vlida porque
um mltiplo comum de a e b tem, pelo menos, max(ai , bi ) fatores de pi em sua fatorao
em nmeros primos e o mnimo mltiplo comum no tem outros fatores primos alm
daquele em a e b.
Exemplo: O mnimo mltiplo comum de 23 35 72 e 24 33 dado por
mmc(23 35 72 , 24 33 ) = 2max(3,4) 3max(5,3) 7max(2,0) .
H um teorema d relao entre o mximo divisor comum e o mnimo mltiplo comum
de dois nmeros inteiros.
Teorema 10 Considere a e b como nmeros inteiros positivos. Ento
ab = mdc(a, b) mmc(a, b)

10
Para demonstra esse teorema vamos considera a fatorao, como visto anteriomente
sabendo que
max(a1 ,b1 ) max(a2 ,b2 )
n ,bn )
mmc(a, b) = p1
p2
pmax(a
n
min(a1 ,b1 ) min(a2 ,b2 )
p2

mdc(a, b) = p1

pnmin(an ,bn )

e
a = pa11 pa22 pann ,

b = pb11 pb22 pbnn ,

temos
(pa11 pa22 pann )(pb11 pb22 pbnn )
max(a1 ,b1 ) max(a2 ,b2 )
p2

= (p1

min(a1 ,b1 ) min(a2 ,b2 )


p2

n ,bn )
pmax(a
)(p1
n

max(a1 ,b1 )+min(a1 ,b1 ) max(a2 ,b2 )+min(a2 ,b2 )


p2

= p1

n ,bn )
pmin(a
),
n

n ,bn )+min(an ,bn )


pmax(a
,
n

sabendo que min(x, y) + max(x, y) = x + y temos


(pa11 pa22 pann )(pb11 pb22 pnbn ) = pa11 +b1 pa22 +b2 pann +bn
= pa11 pb11 pa22 pb22 pann pbnn .

3.4

O algoritmo de Euclides

o mtodo mais eficiente para encontrar o mximo divisor comum. Foi nomeado assim
em homenagem ao matemtico grego Euclides.
Computar o mximo divisor comum diretamente ineficiente. Isto , para encontrar a
fatorao em primos um processo demorado. Um mtodo eficiente de fazer isso utilizar
o algoritmo de Euclides. O algoritmo de Euclides baseado no resultado a seguir sobre
mximos divisores comuns e no calculo do mod: Considere a = bq + r, em que a, b, q e r
so nmeros inteiros. Ento
mdc(a, b) = mdc(b, r).
Assim o problema reduzido utilizando divises sucessivas. Para um melhor entendimento
vamos calcular mdc(91, 287). Primeiro dividimos o maior dos inteiros (287) pelo menor
(91) e obtemos
287 = 91 3 + 14.
Qualquer divisor de 91 e 287 deve tambm ser divisor de 287 91 3 = 14. Alm disso,
qualquer divisor de 91 e 14 dever ser tambm divisor de 287 = 91 3 + 14. Assim, o
mximo divisor comum de 91 e 287 o mesmo que o mximo divisor comum de 91 e 14.
Isto significa que o problema de encontrar o mdc(91,287) foi reduzido ao problema de
encontrar mdc(91,14).
Podemos, ento prosseguir com as divises sucessivas. Dividimos 91 por 14 para obter
91 = 14 +7
Como qualquer divisor comum de 91 e de 14 tambm divide 91 14 6 = 7 e qualquer
divisor comum de 14 e de 7 divide 91, temos que mdc(91, 14) = mdc(14, 7). Continuando
a diviso de 14 por 7 obtemos
14 = 7 2.

11
Conclumos que mdc(14, 7) = 7. Alm disso, como mdc(287, 91) = mdc(91, 14) =
mdc(14, 7) = 7.
Exemplo: Encontre o mximo divisor comum de 414 e 662 mdc(414, 662).
662 = 414 1 + 248
414 = 248 1 + 166
248 = 166 1 + 82
166 = 82 2 + 2
82 = 2 41 + 0.
Portanto mdc(414, 662) = mdc(82, 41) = 2.
Algoritmo 3 Algoritmo de Euclides
mdc(a: inteiro, b: inteiro)
xa
yb
enquanto y <> 0 faa
r mod(a, b)
xy
yr
fim enquanto
retrun x

. mdc(a,b) x

12

Congruncia

Nesta seo mostraremos como resolver um sistema de congruncia linear modular


de pares de primos entre si usando um teorema denominado Teorema Chins do Resto e
ento mostraremos como usar esses resultados como base para realizao da aritmtica
com nmeros inteiros grandes. Discutiremos o Pequeno Teorema de Fermat e o conceito
de um pseudoprimo.

13

Aplicaes da Teoria dos Nmeros

A teoria dos nmeros tem muitas aplicaes, por exemplo ela desempenha um papel
fundamental na criptografia, de modo que a informao no pode se facilmente entendida
sem um conhecimento especial.
Teoria dos nmeros a base de muitos mtodos de criptografia, usado pela primeira
vez h milhares de anos, e amplamente utilizado at o sculo 20. As mensagens eram
encriptografadas mudando cada letra para uma letra diferente, ou cada bloco de letras
para um bloco diferente de letras.
Teoria dos nmeros tambm importante na criptografia de chave pblica, um tipo de
criptografia inventado na dcada de 1970. Na criptografia de chave pblica, saber como
criptografar a mensagem no significa que saber como descriptografar. O sistema de
chave pblico mais amplamente utilizado o criptossistema RSA, que encripta mensagens
utilizando exponenciao modular, onde o mdulo o produto de dois nmeros primos
grandes.
Neste capitulo sera apresentado a criptografia clssica bem como o processo de criptoanalise e a criptografia de chave pblica (criptossistema RSA).

5.1

Criptografia Clssica

Um dos primeiros usos de criptografia foi por Julius Caesar. Ele fez uma mensagem
secreta deslocando cada trs letras do alfabeto (as trs ltimas letras do alfabeto corresponderiam as trs primeiras). Por exemplo, utilizando este esquema a letra B enviado
como a letra E e X corresponder a letra A. Este um exemplo de encriptao, isto , o
processo de fazer uma mensagem secreta.
Para expressar processo de encriptao, utilizado por Caesar, matematicamente,
primeiro substituiremos cada letra por um elemento de Z26 , isto , cada letra agora
se representado como um nmero como mostra a Tabela 1. Podemos representa o mtodo
de encriptao de Caesar por uma funo f (p), onde p um inteiro no negativo, p 25,
f (p) = (p + 3)mod26.
Na verso encriptada da mensagem, a letra representado por p substitudo com a
letra representado por (p + 3)mod26.
Table
0 1 2
A B C
13 14 15
N O P

1: Letras do
3 4 5
D E F
16 17 18
Q R S

alfabeto e sua
6 7 8
G H I
19 20 21
T U V

posio.
9 10
J K
22 23
W X

11 12
L M
24 25
Y Z

Exemplo: Qual a mensagem secreta produzido a partir da mensagem "SOCORRO"


Primeiro substituiremos cada letra por seus respectivos nmeros, obteremos
1814214171714

14
Agora calculamos o nmero correspondente por meio da funo (p + 3)mod26, isto ,
f (18) = (18 + 3)mod26 = 21
f (14) = (14 + 3)mod26 = 17
f (2) = (2 + 3)mod26 = 5
f (17) = (17 + 3)mod26 = 20
Agora temos,
2117517202017
Substituindo os nmeros por letras, temos a mensagem encriptografa: "VRFRUUR".
Para recuperar a mensagem original, isto , para descriptografa a mensagem pelo
mtodo de Caesar, asta calcular f 1 a funo inversa.
f 1 (p) = (p 3)mod26.
Descriptografando a mensagem do exemplo anterior "VRFRUUR" temos
f 1 (21) = (21 3)mod26 = 18
f 1 (17) = (17 3)mod26 = 14
f 1 (5) = (5 3)mod26 = 2
f 1 (20) = (20 3)mod26 = 17
Existem vrios caminhos para generalizar o mtodo de Csar. Por exemplo, em vez
de transferir o equivalente numrico de cada letra por 3, podemos deslocar o equivalente
numrico de cada letra por k, de modo que
f (p) = (p + k)mod26,
f 1 (p) = (p k)mod26.
O nmero inteiro k chamado de chave.

5.2

Criptoanlise

O processo de recuperao do texto encriptografado sem conhecimento do mtodo


utilizado para encriptografa e da chave conhecido como Criptoanlise ou quebra de
cdigo. Criptoanlise um processo difcil, especialmente quando o mtodo de encriptao
desconhecido. A principal ferramenta para a criptoanlise analisar a frequncia das
letras em um texto encriptografado, por exemplo, no ingls as nove letras mais comuns so
E 13%, T 9%, A 8%, O 8%, I 7%, N 7%, S 7%, H 6%, e R 6%. Para criptoanalizar um
texto encriptogrfado, analisa-se as frequncias relativas de cada letra. Lista-se as letras
mais comuns no texto e supe-se que a letra mais comum no texto encriptografado pode
ser E j que est letra a mais comuns nos texto em ingls. Ento, ns determinamos um
hiptese (chave) k. Se a mensagem descriptografada por k faz sentido, ns presumimos que
nossa hiptese correta e que temos o valor correto de k. Se a mensagem descriptografa
usando k no faz sentido, consideramos que a letra mais comum pode ser T , realizamos o

15
teste novamente. E s consideramos o valor de k quando a mensagem descriptografada
fizer sentido.
Exemplo: Suponha que temos a mensagem ZNK KGXRE HOXJ MKZ CUXS. Qual a
mensagem original? Primeiro verificamos a frequncia de cada letra no texto, e percebemos que a letra mais frequente K, ento suponhamos que K equivale a E no texto
descriptografado. Sabendo que E = 4 e K = 10 temos
10 = (4 + k)mod 26
k = 6.
Portanto a mensagem descriptografa THE EARLY BIRD GETS THE WORM. Como a
mensagem faz sentido consideramos que nossa hiptese esta correta.

5.3

Criptografia de Chave Pblica

Nas sees anteriores apresentamos mtodos de codificar mensagens com base em


congruncia. Quando esses mtodos de codificao so usados, as mensagens, que so
sequencia de caracteres, so transcritas em nmeros. Ento, o nmero para cada carcter
transformado em outro nmero. Esses mtodos so exemplos de criptossistemas de chave
privada. Conhecer a chave de codificao permite que encontremos rapidamente a chave
de decodificao.
Nos criptossistemas de chave pblica as chaves de decodificao so mantidas em
segredo e apenas o destinatrio da mensagem pode decodifica-la, porque a chave de
codificao no pode permite que algum encontre a chave de decodificao sem ter um
trabalho muito grande, diferente do criptossistema de chave privada.
5.3.1

Criptossistema RSA

O sistema conhecido como RSA foi criado por trs pesquisadores do M.I.T (Ronald
Rivest, Adi Shamir e Leonard Adleman). O criptossistema RSA baseado em potenciao
modular do produto de dois nmeros primos grande, o que pode ser feito rapidamente
com o Algoritmo de Potenciao Modular. Cada indivduo tem uma chave de codificao
que consiste em um mdulo n = pq, em que p e q so nmeros primos grandes, com 200
dgitos cada, e um expoente e que relativamente primo a (p 1)(q 1). Para produzir
uma chave que possa ser usada na decodificao, dois nmeros primos grandes devem
ser encontrados. O produto desses nmeros primos n = pq, com aproximadamente 400
dgitos, no pode ser fatorado em uma quantidade razovel de tempo. Esta uma razo
importante porque a decodificao no pode ser feita rapidamente sem uma chave de
decodificao separada.
No mtodo de codificao RSA, as mensagens so transcrita em sequncia de nmeros
inteiros. Esses nmeros inteiros so agrupados na forma de inteiros grandes, cada um
representando um bloco de letras. A codificao feita transformando o nmero inteiro
M , que representa o texto total (a mensagem original), em um nmero inteiro C, que
representa o texto codificado (a mensagem codificada), usando-se a funo
C = M e mod n.

16
Por questes praticas este exemplo considera nmeros primos pequeno ,em vez de
primos com 100 dgitos. Exemplo: Codifique a mensagem STOP usando o criptossistema
RSA com p = 43 e q = 59.
n = pq = 43 59 = 2537
mdc(exp, (p 1)(q 1)) = mdc(13, 42 58) = 1
Agora transcrevemos as letras equivalente a STOP para nmeros
1819 1415
Codificamos cada bloco,
181913 mod 2537 = 2081
141513 mod 2537 = 2182
Assim a mensagem encriptografada 2081 2182.

17

ANEXO A
int mod(int a, int b){
int q = 0; /* Quociente*/
int r = abs(a);
while(r>=b){
r = r-b;
q = q+1;
}
if(a<0 && r>0){
r = b - r;
q = -(q+1);
}
return r;
}
int* exp_base(int n, int b, int* p){ /*Funo pra converter a base do numero*/
/* b: base
n: nmero na base 10 a ser expandido
p: ponteiro para armazenar o valor do contador k*/
int q = n;
int k = 0;
int *a = (int*) malloc(n*sizeof(int)); /*aloca dinmicamente um vetor*/
while(q!=0){
a[k] = mod(q,b);
q/=b;
k++;
}
*p = k; /*Conteudo de p recebe o valor de k*/
return a;
}
int PotModular(int b, int *n, int m, int k){
/*b^n mod m
onde n a expanso da potncia em binario
k: tamanho do vetor n ou quantidade de bits */
int x=1;
int pot = mod(b,m);
int i;
for(i=0; i<=k-1; i++){
if (n[i]==1){
x = mod((x*pot),m);
}
pot= mod((pot*pot),m);
}
return x;
}
int mdc(a,b){
int x = a;

18
int y= b;
while(y!=0){
int r = mod(x,y);
x =y;
y = r;
}
return x;
}