25
Números Primos – algoritmos e aplicações AULA 4 Análise de Algoritmos Pós-graduação em Ciência da Computação e Bacharelado em Ciência da Computação - UFU Profa. Sandra de Amo

Números Primos – algoritmos e aplicações AULA 4 Análise de Algoritmos Pós-graduação em Ciência da Computação e Bacharelado em Ciência da Computação - UFU

Embed Size (px)

Citation preview

Page 1: Números Primos – algoritmos e aplicações AULA 4 Análise de Algoritmos Pós-graduação em Ciência da Computação e Bacharelado em Ciência da Computação - UFU

Números Primos – algoritmos e aplicações

AULA 4 Análise de Algoritmos

Pós-graduação em Ciência da Computação eBacharelado em Ciência da Computação - UFU

Profa. Sandra de Amo

Page 2: Números Primos – algoritmos e aplicações AULA 4 Análise de Algoritmos Pós-graduação em Ciência da Computação e Bacharelado em Ciência da Computação - UFU

Primos Definição: Um número natural n é primo se os únicos divisores de p são 1 e

p.

Problema importante: detectar se um dado número natural n é primo.

Algoritmo ‘ingênuo’:Input: um número n de k bitsOutput: ‘sim’ se n é primo, ‘não’ caso contrário.

1. For i = 2, ... , n/22. Se i divide n pára e retorna ‘não’3. Retorna ‘sim’

Qual a complexidade deste algoritmo (em função do TAMANHO DO INPUT n ?)

Page 3: Números Primos – algoritmos e aplicações AULA 4 Análise de Algoritmos Pós-graduação em Ciência da Computação e Bacharelado em Ciência da Computação - UFU

Complexidade Complexidade = O(n)onde n = grandeza do númeroPrecisamos relacionar n com k = tamanho da representação binária

de nn = O(2k ). Logo k = O(log2n)

Portanto a complexidade do algoritmo ingênuo é O(n) = O(2k )Algoritmo ingênuo é exponencial no tamanho do input !!

Problema: O problema de testar a primalidade de um número n é polinomial ? Isto é, existe algoritmo de complexidade polinomial que resolva este problema ?

Page 4: Números Primos – algoritmos e aplicações AULA 4 Análise de Algoritmos Pós-graduação em Ciência da Computação e Bacharelado em Ciência da Computação - UFU

Primos é polinomial !

Somente em 2003 este problema foi resolvido.

Ver artigo:  Primes is in P - Manindra Agrawal, Neeraj Kayal, Nitin Saxena. Annals of Mathematics, 160 (2004), pp. 781-793.

Page 5: Números Primos – algoritmos e aplicações AULA 4 Análise de Algoritmos Pós-graduação em Ciência da Computação e Bacharelado em Ciência da Computação - UFU

Um primeiro projeto de algoritmo Probabilístico para resolver o problema dos

Primos• O ponto onde o algoritmo ingênuo é custoso está no

loop For i = 1, ... , n/2 • Passo 2 é executado um número exponencial de

vezes !

• Ideia : técnica Monte Carlo– Ao invés de executar o passo 2 para cada valor de i =

1,...,n/2, sorteia-se um número p qualquer entre 1 e n/2 e executa o passo 2 uma única vez para p (testa se p divide n)

– Se a resposta for ‘sim’, pára e responde ‘não’.– Caso contrário, pára e responde ‘sim’.

Complexidade = O(k2) onde k = tamanho de n

Page 6: Números Primos – algoritmos e aplicações AULA 4 Análise de Algoritmos Pós-graduação em Ciência da Computação e Bacharelado em Ciência da Computação - UFU

Exemplo Testar se 34 é primo utilizando esta “técnica” de MC (Monte

Carlo).

Quantos números entre 2 e 17 ? 16Sorteia um destes números. Por exemplo: 15. Testa se 15 divide

34. Como a resposta é ‘não’, o algoritmo retorna ‘sim, é primo’ = resposta ERRADA

Se o número sorteado fosse o 17, o algoritmo retorna ‘não, não é primo’ = resposta CERTA.

Qual a probabilidade do algoritmo retornar uma resposta CERTA para o input n = 34 : 2/16 = 1/8 = 12,5 %

Qual a probabilidade do algoritmo retornar uma resposta errada para o input n = 34 : 1- 12,5 = 87,5%

Page 7: Números Primos – algoritmos e aplicações AULA 4 Análise de Algoritmos Pós-graduação em Ciência da Computação e Bacharelado em Ciência da Computação - UFU

Exemplo Testar se 12 é primo utilizando esta “técnica” de MC

(Monte Carlo).

Quantos números entre 2 e 6 ? 5Sorteia um destes números. Por exemplo: 5. Testa se 5

divide 12. Como a resposta é ‘não’, o algoritmo retorna ‘sim, é primo’ = resposta ERRADA.

Se o número sorteado fosse o 3, o algoritmo retorna ‘não, não é primo’ = resposta CERTA.

Qual a probabilidade do algoritmo retornar uma resposta CERTA para o input n = 12 : 3/5= 60%

Qual a probabilidade do algoritmo retornar uma resposta errada para o input n = 12 : 1- 0,6 = 40%

Page 8: Números Primos – algoritmos e aplicações AULA 4 Análise de Algoritmos Pós-graduação em Ciência da Computação e Bacharelado em Ciência da Computação - UFU

Exercício Preencher a tabela: Input Prob.

acertoProb. erro

34 12,5 % 87,5%12 60% 40%30 36% 64%552213 100% 017 100% 05 100% 0

42

O teste da primalidade de MC tem probabilidade de falhar quando o input NÃO É PRIMO.

A probabilidade de falhar varia muito de número para número.

Depende muito do número de valores intermediários para os quais o teste de divisão retorna ‘sim’, que é onde o algoritmo pára e retorna ‘Não, não é primo’. Quanto maior for este número de valores, maior a probabilidade de acerto da resposta negativa ‘Não, não é primo’

Page 9: Números Primos – algoritmos e aplicações AULA 4 Análise de Algoritmos Pós-graduação em Ciência da Computação e Bacharelado em Ciência da Computação - UFU

O que seria interessante ?

• Um algoritmo MC que utilizasse um outro teste (de complexidade polinomial) no lugar da divisão e que:

– tivesse pelo menos 50% de probabilidade de acertar, caso o input não fosse primo.

– Tivesse 100% de probabilidade de acertar, caso o input é primo.

Page 10: Números Primos – algoritmos e aplicações AULA 4 Análise de Algoritmos Pós-graduação em Ciência da Computação e Bacharelado em Ciência da Computação - UFU

Teste de Fermat (1640)• Se n é primo então para todo a, 1 ≤ a < n tal que mdc(a,n) = 1, então

an-1 ≡ 1 mod n

O teste de Fermat (que substitui a divisão) consiste em testar se an-1 ≠ 1 mod n

Teste da divisão que permite concluir que um número não é primo: Se a divide n n não é primo

Teste de Fermat que permite concluir que um número não é primo: Se an-1 ≠ 1 mod n n não é primo

Page 11: Números Primos – algoritmos e aplicações AULA 4 Análise de Algoritmos Pós-graduação em Ciência da Computação e Bacharelado em Ciência da Computação - UFU

Probabilidade de acerto do Teste de Fermat

• Para inputs n primo: 100%• Para inputs n não primo: probabilidade de acerto depende do número de

elementos intermediários a com mdc(a,n) = 1 e para os quais o teste de Fermat falha:

an-1 ≠ 1 mod n

Lema: se n não é primo:

• ou não existe nenhum a intermediário para o qual o teste de Fermat falha,– Que números são estes ? Parecem muito com os primos mas

não são ! Números de Carmichael : Ex. 561 = 3.11.17• ou pelo menos a metade dos valores intermediários

falha no teste de Fermat

Page 12: Números Primos – algoritmos e aplicações AULA 4 Análise de Algoritmos Pós-graduação em Ciência da Computação e Bacharelado em Ciência da Computação - UFU

Prova• Suponha que exista a com mdc(a,n) = 1 tal que o TF

(teste de Fermat) falha:

b

Falha no TF Sucede no TF

a

a.b

Para todo b tal que bn-1 = 1 mod n, temos que (a.b)n-1 ≠ 1 mod nAlém disto se (a.b)n-1 = (a.b’)n-1 b = b’Logo: |Sucede| <= |Falha| Portanto, podemos concluir que pelo menos a metade dos elementos entre 1 e n com mdc(a,n) = 1 falham no TF.

b’a.b’

Page 13: Números Primos – algoritmos e aplicações AULA 4 Análise de Algoritmos Pós-graduação em Ciência da Computação e Bacharelado em Ciência da Computação - UFU

Se não houvesse números de Carmichael ...

• Se N é primo então todos os a entre 1 e n sucedem no TF.

• Se N não é primo então no máximo metade dos a entre 1 e n sucedem no TF

• Probabilidade de acerto do algoritmo quando N é primo: 100%

• Probabilidade de erro do algoritmo quando N não é primo (e não é de Carmichael) ≤ ½

• Probabilidade de acerto quando N não é primo ≥ ½ • Para números de Carmichael, a probabilidade de erro é

100%

Page 14: Números Primos – algoritmos e aplicações AULA 4 Análise de Algoritmos Pós-graduação em Ciência da Computação e Bacharelado em Ciência da Computação - UFU

Um algoritmo probabilistico para testar probabilidade com probabilidade de erro bem baixa para números

compostos não de Carmichael.

Probabilidade de erro quando n não é primo:precisa sortear k valores intermediários que falham no TF simultaneamente.1o sorteio = falha ≤ ½ 2o sorteio = falha ≤ ½ ....

K-ésimo sorteio = falha ≤ ½ Probabilidade ≤ (½)(½)... (½) = (½) k

Page 15: Números Primos – algoritmos e aplicações AULA 4 Análise de Algoritmos Pós-graduação em Ciência da Computação e Bacharelado em Ciência da Computação - UFU

Números Primos são úteis em Criptografia

• Algoritmo RSA para criptografar e descriptografar mensagens.

1. Gera dois números primos grandes p,q de n bits2. N = p.q 3. N1 = (p-1).(q-1)4. Considera um número e < N tal que mdc(e,N1) = 15. Chave pública = (e,N) permite codificar mensagens x

cod(x) = xe mod n 6. Todo mundo que conhece a chave pública pode codificar mensagens usando esta chave.7. Chave privada = número d que permite decodificar cod(x) e reobter x

(xe)d

8. A chave privada não é facilmente obtida por quem desconhece os números p e q. Só é conhecida do dono da chave pública.9. d = inverso de e mod (p-1)(q-1), isto é d.e = 1 mod (p-1)(q-1)

Page 16: Números Primos – algoritmos e aplicações AULA 4 Análise de Algoritmos Pós-graduação em Ciência da Computação e Bacharelado em Ciência da Computação - UFU

Chave privada d realmente decodifica !

• (xe)d = x para todo x entre 0 e N-1 ???• Como ed = 1 mod(p-1)(q-1), então ed = 1 + k(p-1)(q-1)Logo xed – x = x1 + k(p-1)(q-1) – x = 0 mod p

Logo p divide xed – x Analogamente, podemos mostrar que q divide xed – x

Logo N = p.q divide xed – x e portanto xed – x = 0 mod N .

xed – x = x 1 + k(p-1)(q-1) - x = x.(x(p-1))k(q-1) – x = 0 mod p xed – x é divisivel por p pois xp-1 = 1 mod p

Page 17: Números Primos – algoritmos e aplicações AULA 4 Análise de Algoritmos Pós-graduação em Ciência da Computação e Bacharelado em Ciência da Computação - UFU

Como decodificar ?

• Conhecendo a chave privada d• Sem conhecer a chave privada, como

fazer ?– Advinhar p, q e construir a chave privada – Advinhar p, q corresponde a fatorar N em

fatores primos: problema intratável, muito dificil, NP-hard.

Page 18: Números Primos – algoritmos e aplicações AULA 4 Análise de Algoritmos Pós-graduação em Ciência da Computação e Bacharelado em Ciência da Computação - UFU

Que algoritmos faltam para implementar o RSA ?

1. Gera dois números primos grandes p,q de n bits2. N = p.q 3. N1 = (p-1).(q-1)4. Considera um número e < N tal que mdc(e,N1) = 15. Chave pública = (e,N) permite codificar mensagens x

cod(x) = xe mod n 6. Todo mundo que conhece a chave pública pode codificar mensagens usando esta chave.7. Chave privada = número d que permite decodificar cod(x) e reobter x

(xe)d

8. A chave privada não é facilmente obtida por quem desconhece os números p e q. Só é conhecida do dono da chave pública.9. d = inverso de e mod (p-1)(q-1), isto é d.e = 1 mod (p-1)(q-1)

Page 19: Números Primos – algoritmos e aplicações AULA 4 Análise de Algoritmos Pós-graduação em Ciência da Computação e Bacharelado em Ciência da Computação - UFU

Números Primos são úteis em Criptografia

• Algoritmo RSA para criptografar e descriptografar mensagens.

1. Gera dois números primos grandes p,q de n bits2. N = p.q 3. N1 = (p-1).(q-1)4. Considera um número e < N tal que mdc(e,N1) = 15. Chave pública = (e,N) permite codificar mensagens x

cod(x) = xe mod n 6. Todo mundo que conhece a chave pública pode codificar mensagens usando esta chave.7. Chave privada = número d que permite decodificar cod(x) e reobter x

(xe)d

8. A chave privada não é facilmente obtida por quem desconhece os números p e q. Só é conhecida do dono da chave pública.9. d = inverso de e mod (p-1)(q-1), isto é d.e = 1 mod (p-1)(q-1)

Page 20: Números Primos – algoritmos e aplicações AULA 4 Análise de Algoritmos Pós-graduação em Ciência da Computação e Bacharelado em Ciência da Computação - UFU

Exponencial modular

Complexidade = O(n3) se y tem n bits também

Page 21: Números Primos – algoritmos e aplicações AULA 4 Análise de Algoritmos Pós-graduação em Ciência da Computação e Bacharelado em Ciência da Computação - UFU

Exemplo

• Ver planilha de cálculos

Page 22: Números Primos – algoritmos e aplicações AULA 4 Análise de Algoritmos Pós-graduação em Ciência da Computação e Bacharelado em Ciência da Computação - UFU

Como encontrar o inverso de um número mod n ?

• Através do algoritmo estendido de Euclides para calcular o mdc entre dois números.

Page 23: Números Primos – algoritmos e aplicações AULA 4 Análise de Algoritmos Pós-graduação em Ciência da Computação e Bacharelado em Ciência da Computação - UFU

Algoritmo de Euclides para mdc(a,b)

• Input: a,b inteiros de n bits, a ≥ b ≥ 0

• Output : mdc(a,b)

A PROVAR : Se a ≥ b então a mod b < a/2

Logo número de chamadas recursivas = 2n (número de chamadas até alcançar o caso base b = 0)cada chamada recursiva envolve uma operação de divisão O(n2)Complexidade = O(n3)

Quantas chamadas são necessárias para obter a mod b = 0 ?

Page 24: Números Primos – algoritmos e aplicações AULA 4 Análise de Algoritmos Pós-graduação em Ciência da Computação e Bacharelado em Ciência da Computação - UFU

Por que ?

Se a ≥ b então a mod b < a/2 ?

Caso 1: b ≤ a/2

Caso 2: b > a/2

Page 25: Números Primos – algoritmos e aplicações AULA 4 Análise de Algoritmos Pós-graduação em Ciência da Computação e Bacharelado em Ciência da Computação - UFU

Algoritmo estendido de Euclides• Retorna d = mcd (a,b) e x, y tais que d = x.a + y.b• Se d = 1 então x = inverso de a mod b