i ae F e l d o Teoria dos Números E s o S o Tópicos Especiais em...

32
U n i v e r s i d a d e F e d e r a l d o E s p í r i t o S a n t o C C A U F E S Universidade Federal do Espírito Santo Centro de Ciências Agrárias – CCA UFES Departamento de Computação Tópicos Especiais em Programação Site: http://jeiks.net E-mail: [email protected] Teoria dos Números

Transcript of i ae F e l d o Teoria dos Números E s o S o Tópicos Especiais em...

Unive rsidad e F

ede ral do Espír ito S

a nto – CC

A U

FE

S

Universidade Federal do Espírito SantoCentro de Ciências Agrárias – CCA UFESDepartamento de Computação

Tópicos Especiais em ProgramaçãoSite: http://jeiks.net E-mail: [email protected]

Teoria dos Números

Unive rsidad e F

ede ral do Espír ito S

a nto – CC

A U

FE

S

2

Teoria dos Números

● Sumário– Números Primos;

– Divisibilidade;

– Aritmética Modular;

– Congruência;

– Bibliotecas que podem ser utilizadas;

– Problemas.

Unive rsidad e F

ede ral do Espír ito S

a nto – CC

A U

FE

S

3

Números Primos

● Definição:– É um inteiro p > 1 que somente é divisível por 1 e por ele mesmo.

● Se p é um número primo, então p = a · b para inteiros a ≤ b, onde a=1 e b=p.

● Os primeiros números primos são:– 2, 3, 5, 7, 11, 13, 17, 19, 23, and 27.

● Números primos são importantes por serem fundamentais em teoremas da aritmética.

● Apesar de existirem números muito grandes, todos os inteiros podem ser expressados de somente um maneira: como o produto de números primos.– Exemplos: 105 é expressado como 3 × 5 × 7; 32 é expressado como

2×2×2×2×2.

Unive rsidad e F

ede ral do Espír ito S

a nto – CC

A U

FE

S

4

Números Primos

● Este conjunto que números que ao ser multiplicado provê n é denominado fatoração de n.

● A ordem dos números da fatoração não importa, mas a quantidade de vezes que cada um é multiplicado sim.

● Um número primo p é um fator de x se ele aparecer na fatoração de x.

● Qualquer número que não é primordial é dito composto.

Unive rsidad e F

ede ral do Espír ito S

a nto – CC

A U

FE

S

5

Encontrando primos

● A maneira mais fácil de testar se um número x é primo é utilizar divisão repetitiva:– Deve-se começar do menor divisor possível até chegar ao

número x.

● Como 2 é o único primo par, após testar a divisão por ele, basta testar a divisão pelos demais fatores ímpares.

● Além disso, podemos dizer que n é primo se ele não tiver fatores primos abaixo de √n. Por que?

Todo número primo tem raiz irracional.

Então, provamos por contradição...

Unive rsidad e F

ede ral do Espír ito S

a nto – CC

A U

FE

S

6

Se√ p é racional, então:

√p=ab

← não pode ser reduzido

⇒ p=a2

b2

a= f 1 · f 2 · ... · f n⇒a2= f 1

2 · f 22 · ... · f n

2(então p é um fator de a )

⇒a é múltiplo de p⇒a=kp(sendok constante)⇒b2 p=(kp)2⇔b2 p=k2 · p2⇔b2=k2 · p

Assim, vemos que b também é múltiplo de p

Tínhamos determinado quea e bsão primos e não tem fator comum, exceto 1Mas conseguimos determinar que aé múltiplo de p e queb é múltiplo de bEntão, eles possuem o fator em comum p e podem ser divididos por p

Isso vai contra a afirmação inicial de queab

não poderia ser reduzido

Unive rsidad e F

ede ral do Espír ito S

a nto – CC

A U

FE

S

7

Encontrando primos

● O matemático grego Euclides provou que os números primos eram infinitos.

● E Eratóstenes criou um método para descobrir os primos em uma sequência de números naturais de 1 até n.

● Seu algoritmo se baseia em uma “peneira”: ele testa se um número é primo.– Se for, elimina todos os seus múltiplos.

Vamos ver um exemplo...

Unive rsidad e F

ede ral do Espír ito S

a nto – CC

A U

FE

S

8

Primos menores que 5001 02 03 04 05 06 07 08 09 10

11 12 13 14 15 16 17 18 19 20

21 22 23 24 25 26 27 28 29 30

31 32 33 34 35 36 37 38 39 40

41 42 43 44 45 46 47 48 49 50

Como o menor primo é 2, iniciamos por ele e removemos todos seus múltiplos.Após isso, vamos para o próximo número primo e continuamos apagando os múltiplos dele. (próximos primos: 3, 5 e 7). Então, PARAMOS.

Mas por que paramos em 7?Qualquer outro número primo dessa sequência deve ser: 11 * “primo menor”E todos os múltiplos de “primos menores” já foram removidos.

Assim, basta efetuar o cálculo com os números primos anteriores a √n = √50 = 7

02 03 05 07

11 13 17 19

23 29

31 37

41 43 47

Unive rsidad e F

ede ral do Espír ito S

a nto – CC

A U

FE

S

9

fatoracao(long n) {  while ((n % 2) == 0)

{   cout << 2 << endl;  n = n / 2;  }  long i = 3;  while ( i <= (sqrt(n)+1) )

{if ((n % i) == 0){

cout << i << endl;n = n / i;

  }else i = i + 2;

}if (n > 1) cout << n << endl;

}

Fatoração de nFatoração de nTeste com n=2.147.483.647

Para melhorar a performance, pode-se mover o sqrt para fora do laço e só fazê-lo quando o valor de n

modificar.

Teste com n=2.147.483.647

Para melhorar a performance, pode-se mover o sqrt para fora do laço e só fazê-lo quando o valor de n

modificar.

Unive rsidad e F

ede ral do Espír ito S

a nto – CC

A U

FE

S

10

Divisibilidade

● Dizemos que

“b divide a” “b é divisor de a” ⇔ ⇔ b|a,

se a = b.k

● Equivalentemente, dizemos que

b é um divisor de a; ou

a é múltiplo de b;

se b|a

● O menor divisor natural de qualquer inteiro, exceto zero, é 1.● Como encontrar todos os divisores de um número?

– Podemos utilizar a fatoração de primos,

– Mas cuidado: 12, por exemplo, possui os fatores 2, 2, 3. Mas possui como divisores 1, 2, 3, 4, 6, 12.

Unive rsidad e F

ede ral do Espír ito S

a nto – CC

A U

FE

S

11

Máximo Divisor Comum – MDC

● Se os números são primos, seu maior fator em comum será 1.

● Uma forma de fazer o MDC:– Realizar a fatoração de primos dos dois números e

– Depois realizar a multiplicação de todos os fatores em comum.

– Porém, tem custo computacional alto.

● Outra forma é utilizando o algoritmo de Euclides.

Unive rsidad e F

ede ral do Espír ito S

a nto – CC

A U

FE

S

12

Algoritmo de Euclides● O algoritmo de Euclides tem duas observações:

1. Se b|a, então o mdc(a, b) = b

(pois se b|a, então a = b*k)

2. Se a = bt + r, então mdc(a, b) = mdc(b, r)

Pela definição: mdc(a, b) = mdc(bt + r, b)

Assim, se a e b não são primos, eles possuem uma medida em comum, divisível por t, sobrando resto r.

Exemplo (a=34.398 e b=2.132):mdc(34.398, 2.132) = mdc(34.398 mod 2.132, 2.132) = mdc(286, 2.132)

mdc(2.132, 286) = mdc(2.132 mod 286, 286) = mdc(130, 286)

mdc(286, 130) = mdc(286 mod 130, 130) = mdc(26, 130)

mdc(130, 26) = mdc(130 % 26, 26) = mdc(0, 26)

b.t r

a

Unive rsidad e F

ede ral do Espír ito S

a nto – CC

A U

FE

S

13

Algoritmo de Euclides

● O algoritmo de Euclides também pode nos fornecer os inteiros x e y que:

a.x + b.y = mdc(a, b)

a . x+b . y=mdc(a ,b)

mdc (a ,b)=mdc(b , a ' ) ,ondea'=a−b ⌊ab ⌋b . x '+(a−b ⌊ab ⌋). y '=mdc(a ,b)

Trocando por recursividade, chegamos em:a .1+0.0=mdc(a ,0)

Unive rsidad e F

ede ral do Espír ito S

a nto – CC

A U

FE

S

14

/*Encontra o mdc(p,q) e os valores de x,y

onde p*x + q*y = mdc(p,q)*/long mdc(long p, long q, long &x, long &y){    long x1,y1; /* coeficientes anteriores */    long g;     /* valor de mdc(p,q) */

    if (q > p) return(mdc(q,p,y,x));

    if (q == 0) {        x = 1;        y = 0;        return(p);    }

    g = mdc(q, p%q, x1, y1);

    x = y1;    y = (x1 ­ floor(p/q)*y1);

    return(g);}

Unive rsidad e F

ede ral do Espír ito S

a nto – CC

A U

FE

S

15

Mínimo Múltiplo Comum – MMC

● Outra função útil é o MMC:– O menor inteiro que pode ser dividido por um par de

inteiros.

mmc(24, 36) = 72

● O MMC serve para trabalhar com periodicidade:– Quando será o próximo ano (após 2000) que a eleição

presidencial (ocorre a cada 4 anos) coincidirá com o censo (ocorre a cada 10 anos)?

R: Como o mmc(4, 10) = 20, então 2000+20 = 2020

● Para obter o mmc, basta fazer:

mmc (a ,b)=a .b

mdc (a ,b)

Unive rsidad e F

ede ral do Espír ito S

a nto – CC

A U

FE

S

16

Aritmética Modular● Muitas das vezes, nós não precisamos da resposta

completa.– Por exemplo, suponha que seu aniversário esse ano seja em uma

quarta-feira. Qual é o dia da semana que ele será no ano que vem?

Tudo que você precisa saber é o resto da divisão entre 365 (ou 366 para ano bissexto) por 7 dias da semana e somar ao dia da semana atual: 4 para quarta-feira.

● A chave para uma computação mais eficiente é a Aritmética Modular.

É claro que, em princípio, temos que efetuar a conta para obter o resto. Mas para inteiros e operações aritméticas com números grandes, às vezes podemos trabalhar comente com o valor de resto.

Unive rsidad e F

ede ral do Espír ito S

a nto – CC

A U

FE

S

17

Aritmética Modular

● Aritmética modular (ou aritmética do relógio)– Sistema de aritmética para inteiros, onde os

números "voltam pra trás" quando atingem um certo valor, o módulo.

– O resultado da operação é o resto dentre o valor e seu módulo.

Unive rsidad e F

ede ral do Espír ito S

a nto – CC

A U

FE

S

18

Aritmética Modular

● A chave para entender a Aritmética Modular, é entender seus conceitos básicos:– Adição;

– Subtração; e

– Multiplicação.

Unive rsidad e F

ede ral do Espír ito S

a nto – CC

A U

FE

S

19

Aritmética Modular

● Adição– Quanto dá (x+y) mod n?

Isso pode ser simplificado em:

( (x mod n) + (y mod n) ) mod n

Para evitar a soma com números muito grandes.

● Exemplo/Exercício:

Quantos centavos eu terei sobrando se ganhar R$ 123,45 do meu pai e R$ 94,67 da minha mãe?

Unive rsidad e F

ede ral do Espír ito S

a nto – CC

A U

FE

S

20

Aritmética Modular

● Subtração– A subtração nada mais é do que a adição com números

negativos.

● Exemplo:– Quantos centavos eu terei se gastar R$ 52,53?

Obs.: No exercício anterior, você tinha 12 centavos sobrando.

– Então:

(12 mod 100) – (53 mod 100) = (12 + (- 53)) mod 100 =

- 41 mod 100 = 59 mod 100

Unive rsidad e F

ede ral do Espír ito S

a nto – CC

A U

FE

S

21

Aritmética Modular

● Multiplicação– Uma vez que a multiplicação é simplesmente uma adição

repetida:

x.y mod n = (x mod n).(y mod n) mod n

● Exemplo:– Quantos centavos eu terei se ganhar R$ 17,28 por hora

em 2143 horas?

(1728 x 2143) mod 100 =

(1728 mod 100).(2143 mod 100) mod 100 =

(28 * 43) mod 100 = 1204 mod 100 = 4 mod 100

Unive rsidad e F

ede ral do Espír ito S

a nto – CC

A U

FE

S

22

Aritmética Modular

● Exponenciação– Da mesma forma, é somente multiplicação repetida:

xy mod n = (x mod n)y mod n

● Exercício:– Qual é o último dígito de 2100?

Unive rsidad e F

ede ral do Espír ito S

a nto – CC

A U

FE

S

23

Congruência

● A Congruência é uma notação alternativa para representar uma aritmética modular.

● Se a mob n = b, então temos:

a ≡ b (mod n)

Significa que a é congruente a b módulo n.

● Se a mod n = b,

então n é divisor de (a – b)

● Vamos ver um exemplo...

Unive rsidad e F

ede ral do Espír ito S

a nto – CC

A U

FE

S

24

● A congruência expressa quais números pertencem a mesma “fatia”, chamada de classe de equivalência.

● No exemplo acima, temos na mesma “fatia”:

1, 6, 11, 16, 21, 26● Então, temos:

1 ≡ 1(mod 5), 6 ≡ 1(mod 5), 11 ≡ 1(mod 5), 16 ≡ 1(mod 5), ....

De: <http://khanacademy.org>

Unive rsidad e F

ede ral do Espír ito S

a nto – CC

A U

FE

S

25

Congruência● Quais inteiros x satisfazem x ≡ 3(mod 9)?

Isso representa:

x mod 9 = 3 e 9 | (x – 3)

Conjunto de soluções:

x = 9y + 3, onde y {0, 1, 2, ...}∈

a. Quanto é 2x ≡ 3(mod 9)?

Iniciemos pensando: 2x mod 9 = 3

Qual o primeiro número após 9 que gerará resto 3?

Ele é múltiplo de 2?

Como generalizar essa fórmula?

b. Quanto é 2x ≡ 3(mod 4)?

Unive rsidad e F

ede ral do Espír ito S

a nto – CC

A U

FE

S

26

Congruência

● Operação de Adição e Subtração:

Suponha que a ≡ b(mod n) e c ≡ d(mod n).

Então, a + c ≡ b + d(mod n)

– Exemplo:

4x ≡ 7(mod 9) e 3x ≡ 3(mod 9)

Então:

4x – 3x ≡ 7 - 3(mod 9) → x ≡ 4(mod 9)

● A congruência a ≡ b(mod n) é falsa se b não for divisor do mdc(a,n).

Unive rsidad e F

ede ral do Espír ito S

a nto – CC

A U

FE

S

27

Congruência

● Operação de Multiplicação:

Suponha que a ≡ b(mod n) e c ≡ d(mod n).

Então, a.c ≡ b.d(mod n)

● Operação de Divisão:

Não pode-se cancelar fatores comuns em congruências. Ou seja,

6 . 2 ≡ 6 . 1 (mod 3) ⇒ 2 1 (mod 3)≢

Sendo a/b = a.b-1. Poderemos computar a/b (mod n) se encontramos a inversa b-1 na qual bb-1 ≡ ab-1 (mod n). Mas nem sempre será possível encontrar a inversa de b.

– Mas podemos simplificar sem problemas quando:

de: a.d ≡ b.d(mod n.d)

para: a ≡ b(mod n).

Unive rsidad e F

ede ral do Espír ito S

a nto – CC

A U

FE

S

28

Congruência

● Resolvendo Congruências Lineares– Uma Congruência linear é uma equação

a.x ≡ b(mod n)

– Portanto, resolvê-la significa encontrar os valores de x que a satisfazem.

– Nem todas as congruências possuem soluções.

● a.x ≡ 1(mod n) tem solução se e somente se o multiplicador e o módulo são primos.

Assim: mdc(a, n) = 1

● Utilizando o algoritmo de Euclides para encontrar a inversa,

Temos que solucionar: a.x' + n.y' = mdc(a,n) = 1

Então: ax ≡ 1(mod n) → ax ≡ a.x' + n.y' (mod n)

Então, a inversa é o valor encontrado de x'.

Unive rsidad e F

ede ral do Espír ito S

a nto – CC

A U

FE

S

29

Resolvendo Congruências Lineares

● Há três casos que dependem da relação entre a,b e n:– mdc(a,b,n) > 1:

pode-se dividir os três termos pelo divisor para obter uma congruência equivalente.

– mdc(a, n) não divide b:

a congruência não tem solução.

– mdc(a, n) = 1:

há somente uma solução (mod n).

Unive rsidad e F

ede ral do Espír ito S

a nto – CC

A U

FE

S

30

Equações diofantinas

● Equação Diofantina– Equação polinomial que permite a duas ou mais variáveis

assumirem apenas valores inteiros.

– Equação entre duas somas de monômios de grau zero ou um.

● Sendo x, y e z desconhecidos e o restante valores constantes:

→ ax + ny = b:

é equivalente a solução de ax ≡ b (mod n)

→ xn + yn = zn:

para n=2, existem infinitas soluções. Para n>2, não há soluções positivas.

Unive rsidad e F

ede ral do Espír ito S

a nto – CC

A U

FE

S

31

Bibliotecas● Java: Classe BigInteger (java.math.BigInteger).● Funções de interesse para esse tópico:

– Máximo Divisor Comum (Greatest Common Divisor):● BigInteger gcd(BigInteger val)

retorna o BigInteger cujo valor é o MMC de abs(this) e abs(val).

– Exponenciação Modular (Modular Exponentiation):● BigInteger modPow(BigInteger exp, BigInteger m)

retorna o BigInteger cujo valor é thisexp mod m.

– Modular Inversa (Modular Inverse):● BigInteger modInverse(BigInteger m)

retorna o BigInteger cujo valor é this-1 (mod m).

– Primality Testing:● public boolean isProbablePrime(int certainty)

utiliza um teste de primalidade aleatório para retornar verdadeiro se este BigInterger provavelmente é primo e falso se ele não é.

Unive rsidad e F

ede ral do Espír ito S

a nto – CC

A U

FE

S

32

Problemas

● Fáceis:– Light, More Light.

– Euclid Problem.

– Summation of Four Primes.

● Intermediários:– Carmichael Numbers.

– Factovisors.

● Difíceis:– Marbles.