Você está na página 1de 194

THIAGO OLIVEIRA SANTOS

TESTES DE PRIMALIDADE E SUA EVOLUÇÃO

UNIFIEO – CENTRO UNIVERSITÁRIO FIEO PIBIC – PROGRAMA INSTITUCIONAL DE BOLSAS DE ENSINO

Osasco - 2008

THIAGO OLIVEIRA SANTOS

TESTES DE PRIMALIDADE E SUA EVOLUÇÃO

Monografia destinada a UNIFIEO como exigência para avaliação da iniciação científica desenvolvida nesta instituição sob orientação da profª Drª. Marly Mandia.

UNIFIEO – CENTRO UNIVERSITÁRIO FIEO PIBIC – PROGRAMA INSTITUCIONAL DE BOLSAS DE ENSINO

Osasco - 2008

Agradecimentos

À minha orientadora, Marly Mandia, que acreditou em mim e sempre me guiou ao longo

deste trabalho.

Às minhas amigas, Lílian e Renilda, que me incentivaram e me ajudaram em muitos momentos que eu precisei;

Aos meus pais, que são os alicerces de tudo o que eu sou hoje;

A Deus, que abre vários caminhos para trilharmos, e nos dá sabedoria para escolhermos.

Resumo

Este trabalho tem por objetivo discutir um problema que intriga os matemáticos desde os tempos antigos: a Primalidade de números. Analisamos a evolução dos testes de primalidade ao longo do tempo: desde o mais antigo conhecido, o Crivo de Erathostenes, testes mais atuais e probabilísticos, como o de Monte Carlo, até o algoritmo que causou grande impacto na comunidade matemática: o AKS, que não só determina se um número é primo, como faz isso em tempo polinomial. Para desenvolvermos nosso trabalho, nós apresentamos estudos básicos sobre estruturas algébricas, teoria dos números e teoria dos algoritmos. Damos uma descrição histórica de alguns testes e analisamos, particularmente, o algoritmo AKS. Abordamos também a área de Criptografia como uma aplicação dos números primos em nossos dias. Por fim, como apêndice a este trabalho, damos um exemplo de implementação do algoritmo AKS.

Abstract

In this work we study the primality tests and its evolution along the time, since the Erathostenes Crive until the actual probabilistic and deterministic tests like Monte Carlo’s and the algorithm which caused great impact in the mathematical community: the AKS Test. To develop our work, we treat basic concepts about algebraic structures, number theory and theory of algorithms. We give a historical description of some tests and analyze, particularly, the AKS algorithm. We also analyze the costs of algorithms in order to verify if a test takes a polynomial or exponential time. The area of Cryptography is viewed in our work as an application of the prime numbers in our days. Finally, we give an implementation example of the AKS algorithm.

Lista de Símbolos

Z Conjunto dos números Inteiros

Z

MDC

a b mod m

ϕ(n)

U (C)

φ

Conjunto dos Inteiros negativos Máximo divisor comum a côngruo a b módulo m Função de tociente Euler em n

Produtório

Elementos inversíveis do conjunto C Vazio Pertence Qualquer

Se e só se

A

Módulo ou cardinalidade de A

Infinito

C n

π (x)

p Combinação de n p a p

 

n

a

(

H

0

p

n

C

)

(f )

Número de primo até x

Maior inteiro menor do que n

Símbolo de Legendre (p

primo)

Conjunto medial de n

Elemento nulo de C

Coeficiente dominante de f

a
a

log

b

O(n)

F

n

a,b

Raiz quadrada de a

a Logaritmo de a na base b

Big-Oh, custo de um algoritmo

n-ésimo número de Fermat

Subgrupo gerado por a e b

Z

Z

+

*

Conjunto dos Inteiros positivos

Conjunto dos Inteiros não nulos

MMC

a mod m

Z

m

U(m)

Mínimo múltiplo comum Resto de a dividido por m

Inteiros módulo m

Existe

Elementos inversíveis de

Z

m

!

f

: A a B

Único Contido Implica que Função de A em B

Subgrupo gerado por a a

ord a

n!

Ordem de a em A. n fatorial

Somatória

Menor inteiro maior do que n

Símbolo de Jacobi (n composto)

A

 

n

(

a

)

n

1 C

(f )

A[x]

n a
n a

max{A}

f '

aˆ

f (x)

Unidade de C

Grau de um polinômio f

Conjunto dos polinômios com coeficientes em A Raiz n-ésima de a

Elemento máximo do conjunto ª

Derivada da função f Classe de equivalência de a

Subanel gerado pelo polinômio f

Sumário

Introdução: Números Primos e Testes de Primalidade

7

1. Primalidade: um intrigante problema

7

2. Problemas computáveis

8

3. A descoberta: Primos está em P

8

4. A

Evolução dos Testes de Primalidade

9

Capítulo 1. Teoria dos Números, Aritmética Modular e

11

1.1. Resultados básicos da Teoria dos Números

11

1.2. Congruência Módulo m

18

1.3. Sistemas de Congruência

24

1.4. Classes de equivalência e o conjunto Z m

29

1.5. Grupos

34

1.6. Grupos Cíclicos

38

1.7. Grupos em Z m

41

1.8. Distribuição dos Primos

46

1.9. Símbolo de Jacobi e Reciprocidade Gaussiana

49

Capítulo 2. Teoria dos Anéis e

59

2.1. Anéis e Corpos

59

2.2. Anéis Polinomiais

64

Capítulo 3. Sucessões de

77

3.1. Exemplos de definição

77

3.2. Propriedades

81

Capítulo 4. Análise de Custo e Algoritmos

97

3.1. Noção básica do cálculo do custo

97

3.2. O Custo de Operações Básicas

98

3.3. A Notação O

100

3.4. Classificação de Custos

102

3.5. Custo da potenciação modulo n

103

3.6. Algoritmo Euclidiano Estendido

106

3.7. Teste Eficiente da potência Perfeita

111

3.8. Custo do Cálculo do Símbolo de Jacobi

118

3.9. Resumo dos resultados obtidos

120

Capítulo 5.

Testes de

97

4.1. Cronologia dos testes de primalidade

122

4.2. Análise dos Primeiros Testes Determinísticos

125

Capítulo 6.

Números de Mersenne e Teste de Primalidade

135

6.1. Origem e relações básicas dos Números de

135

6.2. Testes de Primalidade envolvendo Sucessões de

137

6.3. O Projeto

147

Capítulo 7.

O Teste de Miller Rabin

135

5.1. Teorema de Miller-Rabin

148

5.2. Algoritmo e Análise de Custo

157

Capítulo 8.

O Teste de Solovay-Strassen

160

8.1. Teorema de Solovay-Strassen

160

8.2. Algoritmo e Análise de Custo

163

Capítulo 9.

O Algoritmo AKS

165

9.1. Teorema Fundamental

165

9.2. Algoritmo

172

9.3. Análise do algoritmo

174

9.4. Observações finais

178

Capítulo 10.

Criptografia

179

10.1. Criptografia de Chave Assimétrica

180

10.2. O RSA e o Problema da Fatoração

181

10.3. A Implementação e a Importância do RSA

185

Conclusão

186

Apêndice

187

A.1.

Implementação do algoritmo AKS

188

A.2.

A.3.

A.4.

Teste da Potência Perfeita

188

Teste de Primalidade Bruto

189

Cálculo do inverseo módulo m

189

Bibliografia

191

Introdução: Números Primos e Testes de Primalidade

1. Primalidade: um intrigante problema.

Desde o início da história da matemática, quando as propriedades dos números começaram a ser estudadas, um dos temas mais notáveis é o dos números primos. Eles são um dos principais fundamentos da Teoria dos Números, e suas propriedades têm largo uso em diversas áreas da matemática. Sua definição é simples: um número natural é chamado de primo quando seus únicos divisores são 1 e ele mesmo. Euclides definia como números primos “comprimentos que só podem ser medidos pela unidade” devido às noções geométricas da matemática da época. Mas neles se embasam diversos problemas, com ou sem solução, de essencial importância para a matemática. É sobre a infinidade dos números primos a primeira demonstração por absurdo da história, e devido a esta infinidade, um dos grandes problemas que persistem até hoje é o de determinar se dado número é ou não primo. Este é o chamado problema da primalidade. A princípio, é um problema de solução simples. Como os únicos divisores de um número primo são 1 e ele mesmo, para saber se um número é ou não primo, basta verificar se ele não admite nenhum outro divisor. De fato, é um procedimento válido, mas em certos casos, inviável. Isto porque o volume de verificações necessárias aumenta junto com a grandeza do número, sendo que para números muito grandes, a verificação se torna grande demais para o período de uma vida humana. Muitos matemáticos se dedicaram a este problema, com o objetivo de encontrar formas de determinar a primalidade de um número sem usar diretamente a definição de primo. No século XX, com o avanço dos estudos na teoria dos números e também com o advento da criptografia 1 muitos métodos foram desenvolvidos e resultados impressionantes foram alcançados. Os testes mais usados até hoje foram criados nessa época, mas foi em 2003 que ocorreu o avanço matemático mais significativo para este problema: a invenção do algoritmo AKS.

1 Criptografia são técnicas para ocultar informação, de forma que apenas quem tenha a chave para revelá-la poderá descobrir seu conteúdo. A necessidade de codificação de mensagens cresceu durante as grandes guerras e com a invenção da informática. A criptografia moderna é totalmente baseada em sofisticados métodos matemáticos.

2. Problemas computáveis

Entende-se por problema computável todo o problema que pode ter uma solução descrita em uma série de passos finitos ou, em outras palavras, todo problema que pode ser resolvido por meio de um algoritmo. Dentro desta categoria, temos várias classificações sobre eficiência. Note- se que a eficiência de um método não é apenas sua validade ou eficácia, isto é, se ele resolve efetivamente o problema ou não, mas sim a sua rapidez em resolver o problema. Quanto mais rápido é um método, mais eficiente ele é. Dentre essas classificações, temos as duas mais utilizadas que é a Exponencial e a Polinomial. Geralmente, todo método de resolução de um problema computável que tenha tempo exponencial, tem um tempo de resolução que cresce de maneira incontrolada, em função do tamanho do problema. Por outro lado, os métodos de resolução de tempo polinomial têm um crescimento muito bem delimitado, e são ideais para serem implementados. Diante disso, temos o que chamamos de problema computacional, que é determinar se o tempo de resolução de um problema pode ou não ser limitado por uma função polinomial, de acordo com seu tamanho. Usualmente, definimos o conjunto dos problemas que comprovadamente podem ser resolvidos em tempo polinomial como P. É praticamente impossível demonstrar que certo problema nunca poderá ser resolvido em tempo polinomial, isto é, que ele só pode ser resolvido em tempo exponencial. Portanto, definimos o conjunto dos problemas que não sabemos se podem ser resolvidos em tempo polinomial como NP. É um desafio computacional determinar se certo problema está em P, e um dos mais conhecidos é exatamente o problema da primalidade. Determinar se um número é primo ou não, é uma tarefa aparentemente simples, mas, à medida que o tamanho do número testado aumenta, a tarefa começa a ficar insana. De fato, para certas grandezas um computador levaria centenas de milhares de anos para determinar a primalidade de um número, usando os métodos mais óbvios.

3. A descoberta: Primos está em P

Foi surpreendente para os matemáticos do mundo inteiro o artigo “Primes Is in P”. publicado em agosto de 2002.

A surpresa não foi devida só ao fato de que o grande problema computacional da primalidade foi resolvido, mas porque foi resolvido com conceitos fundamentais de álgebra que são ensinados nos cursos de graduação em matemática. Mais do que isso, o problema não foi resolvido por aqueles que há tantos anos se dedicavam a ele. Foi resolvido por três estudantes indianos, sendo que dois deles tinham acabado der concluir o curso de graduação. Grandes problemas matemáticos foram resolvidos no século XX. No entanto, nenhum deles usou conceitos tão simples como os usados em “Primos está em P”. São resoluções acessíveis apenas a especialistas, por usarem conceitos matemáticos bastante avançados. “Primos está em P” chegou a virar notícia de jornal, algo em desencontro inclusive com a imagem desinteressante que tantas pessoas têm sobre a matemática. Isso, claro, devido a importância dos números primos nos métodos modernos de criptografia, o que atrai ainda mais curiosos e especialistas em segurança de dados. Desde sua descoberta, houve várias variações e melhorias do algoritmo AKS. Este trabalho se propõe a apresentar uma forma mais elementar do algoritmo, que pode ser encontrada em [COUTINHO 2004] além de [DIETZFELBINGER 2004].

4. A Evolução dos Testes de Primalidade

Desde tempos remotos, como já dito, a primalidade intriga os matemáticos e gerou frutos fabulosos para a ciência. O objetivo de nosso trabalho é analisarmos os testes de primalidade criados ao longo da história e todo o conceito por trás deles, até chegarmos a esta última e grande descoberta: o algoritmo AKS. Não iremos abordar todos os testes, pois isso foge das dimensões deste trabalho. No entanto, abordaremos testes de certa relevância quantos aos avanços feitos para a resolução do problema da primalidade. Apresentaremos todo o conteúdo matemático necessário além de uma pequena abordagem computacional, para podermos falar da eficiência dos testes apresentados. Além disso, apresentaremos uma breve cronologia, para que o leitor se localize nesta linha do tempo e, em seguida, iremos analisar matematicamente alguns dos testes citados. Os primeiros testes analisados são conhecidos como Testes Clássicos de Primalidade e serão abordados em um único capítulo. Eles se caracterizam por serem determinísticos e de baixa

eficiência, ou seja, de tempo exponencial. Alguns, porém, como o leitor verá, possuem tempo polinomial, mas estes são testes voltados apenas para tipos particulares de primos, portanto o problema da primalidade não é resolvido com eles. Os próximos testes analisados se basearam numa teoria conhecida como Sucessões de Lucas. Tais testes são eficientes para classes muito particulares de números como, por exemplo, os números de Mersenne. Iremos, enfim, abordar três testes em capítulos separados: Miller-Rabin, Solovay- Strassen e Algoritmo AKS. Os dois primeiros são testes probabilísticos, isto é, não determinam se um número é primo, mas determinam uma chance de ser. O leitor verá que a eficiência dos testes probabilísticos é muito maior do que a do algoritmo AKS e eles oferecem uma margem de erro muito satisfatória e, por isso, ainda são os métodos mais usados para encontrar primos comercialmente, isto é, para uso em criptografia ou qualquer outra aplicação computacional que necessite de primos gigantescos. Devido a isso, a importância do algoritmo AKS é mais matemática do que comercial, o que claramente não diminui sua relevância Enfim, aventuremo-nos por este fascinante caminho que partiu de Grécia e chegou à Índia, que é o caminho trilhado para a resolução do grande problema da primalidade.

Capítulo 1. Teoria dos Números, Aritmética Modular e Grupos.

Neste capítulo estudaremos a teoria em que se baseia a maioria dos testes de Primalidade.

De fato, há uma classe de testes que se baseia numa teoria conhecida como sucessões de Lucas,

abordada no capítulo 3. Além disso, o algoritmo AKS, apresentado no capítulo 9, também se

baseia na teoria apresentada no capítulo 2 deste trabalho.

1.1. Resultados básicos da Teoria dos Números

Muitos conceitos básicos da teoria dos números se tornam intuitivos para uma pessoa

fundamentalmente instruída na Matemática. Devido a isso, não é de interesse deste trabalho

seguir total rigor ao falar destes conceitos. Pelo contrário, iremos destacar o necessário para

nosso objetivo e de maneira sucinta, para melhor entendimento e aproveitamento dos resultados.

Começaremos definindo divisão:

Proposição 1.1.1: Divisão Euclidiana.

Dados a,b Z : b > 0 , existem q, r Z unicamente determinados tais que a = b.q + r ,

sendo 0 r < b .

Demonstração

Se a = 0 a solução é trivial. Provemos para a 0 .

Claramente, existe

q

0

tal que

.

b q

0

a

. Seja então

r

0

0

sempre. Então, temos dois casos para

r

0

:

r

0

= a b.q . Pela definição de

0

1. r < b , neste caso não há o que demonstrar;

0

2.

b c + b q

.

.

0

r

0

b .

a b (c + q

.

Mas

0

)a

então

existe

, isto é, para

q

1

c > 0

tal

que

= c + q

0

, temos b q

.

1

a

b.c r .

0

Notemos

e

r

1

= a b.q .

1

b.q

0

,

que

Aplicando estes argumentos consecutivamente, podemos encontrar um

q

n

tal que r n <

b .

Com isso, não existe c > 0 tal que

valor para q que resulta em r = a b.q : 0 r < b .

b.c r . Além disso,

n

r

n 1

b . Isto implica que

q

n

é o único

Esta proposição nada mais é do que a formalização do usual algoritmo da divisão,

amplamente conhecido. Convenientemente, podemos definir também divisibilidade:

Definição 1.1.1: Dados dois inteiros a e b , com a 0 . Dizemos que a divide b (denotamos

= ac. Nessas condições, chamamos a de divisor de b, e

chamamos b de múltiplo de a.

a | b )

se

existe c

inteiro tal que b

Obviamente, a unidade é divisor de todo número inteiro, o que implica que todo número

inteiro é divisor de si mesmo, isto é, a = 1.a,a Z .

Assim, algumas propriedades são imediatas quanto a divisão:

Propriedades 1.1.1:

Para divisores não nulos

1. a | a ;

2. a | b,b | c a | c ;

3. a | c, b | d ab | cd

4. a | b, a | c a | (b + c);

;

Estas propriedades não serão demonstradas exatamente por serem elementares. Mas há

outra propriedade que merece um pouco mais de atenção.

Proposição 1.1.2: Sejam a, b, c Z tais que a | (c + b). Temos que a | c se e só se a | b .

Demonstração

Suponha que a | c , mas a /| b . Temos então que b = a.q + r,0 < r < a . Mas, por hipótese,

. Mas isto significa que

a volta.

(Observe que se a não dividir nenhum deles, ainda assim a pode dividir a soma do resto de cada

um).

1

a | c , isto é,

2

. Logo,

b + c = a q

.

2

.

1

+ r b + c = a(q

a | b .

Isto é

1

2

)+ r

c = a.q

+ a q

+ q

a /| (c + b), o que é um absurdo. Portanto,

suficiente

para a

ida e

para

Daremos, agora, algumas definições importantes.

Definição 1.1.2: (Número Primo e Número Composto)

Um número

a Z

+

,

a

1

é chamado de primo se seus únicos divisores são a unidade e

ele mesmo. Caso contrário, um número é chamado de composto.

Definição 1.1.3: (Divisor Comum)

Se

a, b, c Z

+ são tais que a | b e a | c , dizemos que a é um divisor comum de b e c. Seja

o conjunto dos divisores comuns de a e b. Então, chamamos de

máximo divisor comum o elemento d = max(A) e denotamos este número como d = MDC(a,b).

Notemos que A é não vazio uma vez que 1 A e os divisores positivos de um inteiro positivo x

pertence ao conjunto{1,

então A

=

{x

Z

+

: x | b e x | c}

, x}.

Definição 1.1.4: (Múltiplo Comum)

Se

a,b, c Z

+ são tais que a | c e b | c , dizemos que c é um múltiplo comum de a e c. Seja então

A {x

=

Z

+ : a | x,b | x} o conjunto dos múltiplos comuns de a e b. Então, chamamos de mínimo

múltiplo comum o elemento m = min(A) e denotamos este número como m = MMC(a,b).

Notemos que A é não vazio uma vez que

a b A .

Podemos encontrar a partir dessa definição um divisor ou um múltiplo comum de qualquer par de inteiros, tal como o MDC ou o MMC. Além disso, não é difícil imaginar a forma

do MMC. Afinal, sejam a,b, d Z tais que d = MDC(a,b). Então, podemos escrever

a = d.a', b = d.b' . Claramente m = d.a'.b' é divisível por ambos, logo, é um múltiplo comum. No

entanto, qualquer fator que seja removido fará com que ele não seja mais divisível por a ou por b. Logo, ele é o mínimo múltiplo comum. Diante disso, é fácil verificar a próxima proposição.

Proposição 1.1.4: Seja a, b Z . Então, MMC(a,b).MDC(a,b) = a.b .

Iremos mostrar como encontrar o máximo divisor comum mais à frente. Devido à proposição acima, isso será o suficiente para encontrar também o MMC.

Definição 1.1.5: (Números primos entre si)

Dizemos que

a,b Z

+ são primos entre si se MDC(a,b) = 1 .

Uma verdade bem sutil é que se um número positivo não é primo ele pode ser escrito como o produto de vários primos distintos. Notemos que todo composto c tem, no mínimo, dois

forem compostos, é

possível aplicar este resultado novamente para cada um deles. A questão é que há um número finito de possíveis divisores e, por isso, aplicando esse resultado consecutivamente, chegaríamos, em dado momento, a uma sequência de divisores primos. Mas, além disso, a menos da ordem dos fatores, existe uma única forma de escrever um número composto positivo como o produto de primos (positivos). Este resultado será expresso no próximo teorema:

divisores d

1

,

d

2

Z

, 1

< d

1

,

d

2

< c

tais que

c = d .d

1

2

. Mas,

se

d

1

e

d

2

Teorema 1.1.1: O Teorema Fundamental da Aritmética (TFA).

então

Seja

k

1

(1)

.

p

< p

2

a Z : a > 1,

,

 

existe

uma

única

forma

de

escrever

a

como

é

primo

e

k(i) > 0

para

qualquer

i {1,2,

,

n} e

a = p

1< p

1

k (2)

2

<

p

k

n

(

n

)

< p

n

.

onde

p

i

Demonstração Se a é primo, então a = p e não há o que demonstrar. Se a é composto, sabemos que ele

pode ser escrito como o produto de primos. Então, demonstremos a unicidade da fatoração por

indução sobre n. Seja

1 . Suponhamos que exista outra fatoração de

a = p

k (1)

a = q

p

k

1

(1)

y (1)

1

= q

q

y (1)

1

y

m

(

m

)

,

m

1

, q

q

y

m

(

m

)

, donde

j

p

primo

k

1

(1)

|

q

y (1)

1

para

q

y

m

(

m

)

qualquer

. Como os

q

j {1,

,m}.

Assim,

temos

que

j são primos distintos isso implica que

p

k (1)

1

q

y (2)

2

|

q

q

y

i

(

y

m

(

i

)

m

, para algum i. Assumindo, sem perda de generalidade, que

p

k

1

(1)

|

q

y (1)

1

, temos que

)

=

1

e, portanto,

y(2),

,

y(m) = 0 . Logo,

a = p

k

1

(1)

= q

y (1)

1

. Assim, para este caso o

teorema é válido.

Suponhamos então que o teorema é válido para

a = p

k (1)

1

p

k

n

(

n

)

,

n

1

. Provemos o

mesmo para

a

=

p

k (1)

1

p

k

n

(

n

)

.

p

k

n

(

n +

+ 1

1)

.

Ora,

Suponhamos, por absurdo, que haja outra fatoração para a, sendo

a

=

q

y (1)

1

q

y

m

m + 1)

(

+ 1

,

m

1

.

p

( n + 1

k

n

+

1)

|

q

y (1)

1

q

y

m

(

m

)

, usando o mesmo argumento anterior, sem perda de generalidade

podemos supor que

p

k

n + 1

(

n +

1)

=

q

y

m + 1

(

m +

1)

;

logo

p

k (1)

1

p

k

n

(

n

)

= q

y (1)

1

q

y

m

(

m

)

. Mas, pela hipótese de

indução, temos que m = n e

única é válida.

p

k

i

( )

i

= p

k( j)

j

se i = j . Portanto, por indução, temos que a fatoração

Corolário 1.1.1: Seja

Este corolário é uma consequência direta do teorema 1.1.1. De fato, como a e b não possuem fatores primos em comum e ambos dividem c, c possui os fatores de a e de b e, portanto, é divisível por ab.

a, b, c Z

tal que MDC(a,b) = 1 . Se a | c, b | c

então ab | c .

Algumas conclusões são fáceis de imaginar:

Como todo inteiro tem uma fatoração única em primos, então dois inteiros serão

primos entre si se e só se os primos que aparecem na decomposição de um deles

não aparecem na do outro;

O máximo divisor comum de dois inteiros é o produto de todos os fatores primos

em comum.

O resultado abaixo é muito importante, pois ele é um passo para a garantia de que

podemos procurar números primos arbitrariamente grandes.

Teorema 1.1.2: Há infinitos números primos.

Demonstração

Suponhamos que haja um número finito de primos. Então, sejam

p , p

1

2

,

,

p

m

a

seria

sequência de todos os números primos positiva existente. Nesse caso,

divisível por todos os primos. Como já listamos todos os primos existentes, n + 1 não é primo.

Então

i divide n, pela proposição

n

=

p .p

1

2

p

m

p

i

divide n + 1, para algum i tal que 1 i m . Mas, como

p

1.1.2

números primos.

p

i

divide 1, o que é uma contradição, pois

p

i

> 1

já que é primo. Logo, há infinitos

Teorema 1.1.3: Teorema de Euclides.

Seja a,b, c Z . Se a | b.c

e MDC(a,b) = 1 então a | c .

Demonstração

Seja

a = p

k (1)

1

p

k

n

(

n

)

a fatoração em primos de a. Então

para qualquer 1 i n . Mas, como MDC(a,b) = 1 , então

p

k

i

(

i

)

|

/

(TFA), p

k

i

( )

i

|

c

, para qualquer 1 i n e, conseqüentemente, a | c .

p

k (1)

1

p

k

n

(

n

)

|

b c

.

p

k

i

(

i

)

|

b c

.

,

b . Logo, pelo teorema 1.1.1

Por fim, demonstraremos uma proposição que implica em uma maneira eficiente de

determinar o máximo divisor comum entre dois números. Com isso encerraremos esta parte do

capítulo.

Proposição

1.1.5:

Seja

a,b, c Z .

Se

q Z

tal

que

a = b.q + c

então,

MDC(a,b) = MDC(b, c).

Demonstração

Seja d

Além disso, pela definição de divisão podemos escrever

1

=

MDC(a,b), d

2

=

MDC(b, c) . Por hipótese, temos que a = b.q + c c = a b.q .

d

2

d

1

. Mas, como

'

2 é um divisor comum de b e de a. Finalmente,

, o que

b = d

2

.

b

e

c = d

2

.

c

'

d

1

d

. Analogamente, podemos mostrar que

d

2

c = a b.q , pela proposição 1.1.2 temos que

MDC(a,b) , temos que

como d

implica que

1 =

d

1

= d , isto é, MDC(a,b) = MDC(b, c).

2

Pela proposição 1.1.1, sabemos que podemos escrever todo número inteiro a na forma

a

= b.q + r,0 r < b .

Com

isto

MDC(a,b) = MDC(b, r).

Mas

também

podemos

escrever

b

= r.q'+r',0 r'< b , obtendo assim MDC(b, r) = MDC(r, r'). Como existe um número finito de

como

o último e penúltimo restos dessas consecutivas divisões. Como qualquer número divide zero e,

, podemos

usando consecutivamente a proposição 1.1.5, temos que

inteiros r,0 r < b , isso implica que, continuando este processo, obteremos

r n

=

0,

r

n1

>

0

(

MDC a b

,

)

=

(

MDC r

n

,

r

n 1

)

chegar à conclusão que

Isto

simplifica

(

MDC r

n

,

r

n

em

muito

1

)

o

=

r

n

1

.

processo

de

obtenção

do

máximo

divisor

comum,

e

usualmente, organizamos os restos e quocientes consecutivos na forma da seguinte tabela:

Algoritmo 1.1.1: Algoritmo Euclidiano para o MDC

 

q

1

q

2

.

q

n1

a

b

 

r 1 .

r

n2

r

1

r

2

 

.

0

Donde concluímos que

(

MDC a b

,

)

=

r

n 1

. Eis, então, um exemplo de aplicação deste

algoritmo. Encontremos o MDC dos números 248 e 786.

   

5

 

1

9

2

 

78

 

42

 

3

4

2

6

48

8

 

42

8

4

 

2

0

 

Portanto, concluímos que o máximo divisor comum entre os números 248 e 786 é 2. Na

seção 1.3 veremos uma aplicação muito útil deste algoritmo.

1.2. Congruência Módulo m

Estudaremos, agora, a aritmética modular, desenvolvida por Gauss, e que será a principal

ferramenta deste trabalho.

Definição 1.2.1: (Congruência Módulo m)

Seja

a b (mod m)) se

a,b, m Z , m > 1.

(denotamos

m | a b . Analogamente, dizemos que a não é côngruo a b módulo m

Dizemos

que

a

é

côngruo

a

b

módulo

m

( a ≡/ b (mod m)) se m /|

a b .

Já excluímos os casos em que m 1, pois, claramente, se um número é divisível por m, também será pelo oposto de m. Por tanto, basta estudarmos os casos de congruência para valores positivos de m. Os casos m = 1 e m = 0 são irrelevantes. Um resultado simples é o seguinte: pela proposição 1.1.1 (divisão euclidiana), dado um a inteiro podemos escrevê-lo como a = q.m + r , logo temos que a r = q.m , isto é m | a r .

Portanto, qualquer inteiro é côngruo módulo m ao seu resto na divisão por m. Por conveniência, então, daremos mais uma definição relativa à congruência modular:

Definição 1.2.2: (Redução Módulo m)

Seja

a, m Z , m > 0 ,

e seja

a = q.m + r,0 r < m . Então, dizemos

módulo m de a (denota-se a mod m ).

que

r

é

a

redução

Ora, devido às propriedades de divisão, manipulação de congruências é muito semelhante à manipulação de igualdades. De fato, todas as propriedades conhecidas na igualdade são válidas para as congruências, com exceção de uma. Se tivermos c.a = c.b, c 0 podemos dizer que a = b . No entanto, lidando com

congruências isso pode não acontecer, por exemplo:

2.5 2.3(mod 4), mas 5 ≡/ 3(mod 4)

Isto acontece porque uma das condições do teorema 1.1.3 (teorema de Euclides) não é

verdadeira: o máximo divisor comum de m e c não é um. Ora, c.a c.b(mod m) é o mesmo de

dizer que m | c.a c.b e, colocando o c em evidência, temos m | c.(a b). Neste ponto há dois

casos: se MDC(m, c) = 1 então, pelo teorema 1.1.3, m | (a b). Se MDC(m, c) > 1 , todavia, isso

pode não acontecer, como no exemplo acima. Portanto, para o cancelamento do produto, temos

que tomar um cuidado a mais em congruências: c.a c.b(mod m), c 0 implica a b(mod m)

se MDC(m, c) = 1 .

Enfim, listemos as propriedades da congruência:

Propriedades 1.2.1:

Para a,b, c, m Z , m > 1 temos:

1. a a(mod m)

2. a b(mod m) b a(mod m)

3. a b(mod m),b c(mod m)a c(mod m)

4. a b(mod m), c d(mod m)a + c b + d(mod m)

5. a b(mod m) a + c b + c(mod m),c

6. a b(mod m), c d(mod m)ac bd(mod m)

7. a b(mod m)a b (mod m), n 0

8. ac bc(mod m), c 0 e MDC(c, m) = 1 a b(mod m)

n

n

Como procedemos anteriormente, estas são propriedades elementares e não serão demonstradas. A única que merece atenção especial é a propriedade 1.2.1.8, a qual esta já foi discutida logo acima. Demonstremos, agora, uma interessante propriedade relativa a congruências modulo m.

Proposição 1.2.1: Se a, m Z tal que m > 1 tal que MDC(m, a) = 1 , então temos que o conjunto

1).a mod m} é igual ao conjunto

de reduções modulo m R = {1.a mod m,2.a mod m,

,(m

{1,2,

,

m 1}.

Demonstração

temos, pela propriedade 1.2.1.8,

. Dessa forma, podemos concluir que as reduções pertinentes a R

são incongruentes duas a duas, isto é, R tem exatamente m 1 elementos. Além disso, nenhuma

dessas reduções resultará em zero, já que MDC(m, a) = 1 e as reduções são feitas dos produtos de

a por elementos de

Portanto, R = {1,2,

r R temos 1 r < m 1.

que r

Dados

r

1

,

r

2

{1,2,

logo

r

1

,

1}

tais que ar

1

ar (mod m)

2

m

= r

2

1

r (mod m)

2

{1,2,

, m 1}. Sendo assim, para qualquer

, m 1}.

É essencial que MDC(m, a) = 1 para que esta proposição seja verdadeira. Por exemplo, se

m = 6 e a = 2 , então 3 2 mod 6 = 0 .

Teorema 1.2.1: O Pequeno teorema de Fermat.

Seja p um primo positivo e a um inteiro tal que p /| a . Então, a

Demonstração

p

1

(

1 mod

p)

.

Como p é primo, temos que MDC(p, a) = 1 . Logo, pela proposição 1.2.1 temos que

R = {1.a mod p,2.a mod p,

,(p

1).a mod p}= {1,2,

r

r =

R

(p

1

)

!

(p

,

p 1}. Logo,

) a

1 !.

p 1

mod

p

número positivo menor do que ele, temos que

MDC((p 1)!, p) = 1 logo, pela propriedade 1.2.1.8 (cancelamento do produto), temos que

Como

p

é

primo

com

todo

a

p

1

(

1 mod

p)

.

Corolário 1.2.1: (2º Forma do Pequeno teorema de Fermat)

Seja p um primo positivo e a um inteiro qualquer. Então a

p

a(

mod

p)

.

Demonstração

Temos dois casos para a:

a a

.

p

a

p

1. p

/|

1

a

(

.1 mod

a .

p)

2.

a(

mod

p | a .

p) .

Neste

a

p

a(

caso,

mod

p)

Neste

caso,

pelo

teorema

1.2.1,

a 0(mod p)

implicando

que

a

p

1

a

(

1 mod

p) ,

(

p 0 mod

p)

logo

logo

1(mod 9) ,

no entanto, 9 não é primo. Todavia, podemos fazer uma generalização do teorema 1.2.1. De fato,

isto foi feito no famoso teorema de Euler.

Notemos que a recíproca do teorema 1.2.1 não é verdadeira. Por exemplo, 8

8

Para tratarmos deste resultado, primeiramente definamos uma função:

Definição 1.2.3: (Função de Euler)

Chamamos de Função de Euler ou Função Tociente a função ϕ : N a N tal que ϕ(n) é

a quantidade de inteiros positivos a < n onde o máximo divisor comum com n é 1.

Por exemplo, ϕ(6) = 2 pois o conjunto de todos os

a Z

+ tal que a < 6 e MDC(a,6)= 1

é P = {1,5}. Claramente, seja p um número primo positivo, temos então que ϕ(p) = p 1, já que

MDC(a, p) = 1,a :1 a < p .

Proposição 1.2.2:

Se

2. Se

1.

k

, então

(

ϕ

n

)

=

p

k

1

.(

p

1)

n = p

n = p q então ϕ(n) = ϕ(p)ϕ(q)

Demonstração

1.

Seja

a : 0 a < p

k

. Ora, dizer que

(

MDC a p

,

k

)1

é equivalente a dizer que

p | a . Logo, se esta condição for verdadeira, temos que a = p.a' , onde

p

k1

números divisíveis por p menores do que

p

k

. Logo,

(

ϕ

p

k

)

=

p

k

0

p

k

a

1

'

<

=

p

p

k

k

1

1

. Portanto, há

.(

p

1)

.

2. Notemos que se n = p.q , onde p e q são primos, todos os múltiplos a de p ou de q

1)q, n}. Este conjunto possui,

p + q 1 elementos. Logo, ϕ(n) = p.q (p + q 1) = (p 1)(q 1