Exercicios - Sandra de Amo

Propaganda
Pós-graduação em Ciência da Computação – UFU
Disciplina – Análise de Algoritmos
Profa. Sandra de Amo
Exercícios – AULAS 4 e 5
Temas: Congruência, representação de números
Exercício 1: Sejam x, y, x’, y’ ϵ Z tais que x ≡ x’ mod n e y ≡ y’ mod n. Mostre que:
a) x + y ≡ x’ + y’ mod n
b) x.y ≡ x’.y’ mod n
Exercício 2: Se a ≡ b mod N e M divide N então a ≡ b mod M
Exercício 3: A soma de 3 números binários de 1 dígito tem no máximo 3 digitos. De fato, o
maior número binário de 1 dígito é 1, e 1 + 1 + 1 = 3 cuja representação binária é 11 (2
dígitos). O mesmo acontece com a soma de 3 números decimais de 1 dígito: o maior número
decimal de 1 dígito é 9, e 9 + 9 + 9 = 27 que é um número de 2 dígitos.
Mostrar que em qualquer base b ≥ 2, a soma de 3 números de 1 dígito tem no máximo 2
dígitos.
Exercício 4: Seja N um número inteiro natural, k2(N) = tamanho da representação binária de
N e k10(N) = tamanho da representação decimal de N. Mostre que k2(N) ≤ 4.k10(N).
Exemplo: se N = 1024, k2(1024) = 11 e 4. k10(1024) = 4.4 = 16. Logo k2(1024) ≤4.k10(1024).
Temas: Números Primos e noções de teoria dos números.
Exercicio 5: Considere o seguinte algoritmo que calcula o quociente e o resto da divisão de
dois números x e y:
Divide(x,y)
Input: dois números x, y de n bits, onde y ≥ 1
Output: O quociente q e o resto r da divisão de x por y
1.
2.
3.
4.
5.
6.
If x = 0: return (q,r) = (0,0);
(q,r) = divide(chão(x/2),y);
q = 2.q, r = 2.r;
If x é impar: r = r+1;
If r ≥ y: r = r-y , q = q+1;
return (q,r)
Exercicio 6: Considere o seguinte algoritmo que calcula a exponencial xy mod n
Function modexp(x,y,N)
Input : dois números inteiros x, N de n bits e y um número inteiro
Output: xy mod N
1.
2.
3.
4.
If y = 0: return 1
z = modexp(x, chão(y/2),N)
if y é par return z2 mod N
else return x. z2 mod N
Execute o algoritmo modexp passo a passo para calcular 1325 mod 15.
Atenção:
• Nos passos intermediários, trabalhe com os números mod 15. Por exemplo 132 = 4
mod 15; 133 = 13.4 = 7 mod 15, etc.
• Para calcular x mod n utilize o algoritmo divide(x,n): (q,r) = divide(x,n). O
número r é x mod n.
Exercicio 7. Considere o algoritmo probabilistico de Monte Carlo para determinar se um
número n é primo em k tentativas:
Primok(n)
1. For i = 1, ..., k
2.
Escolhe a, 2 ≤ a ≤ n-1
3.
M = modexp(a,n-1,n);
4.
Se M ≠ 1 retorna ‘não’
5. Retorna ‘sim’
a) Se n é primo, qual a probabilidade da resposta de Primok(n) ser correta ?
b) Se n é um número de Carmichael, qual a probabilidade da resposta de Primok(n) ser
correta ?
c) Se n não é primo nem de Carmichael, qual a probabilidade da resposta de Primok(n)ser
correta ? (Sugestão: esta probabilidade é igual a 1 – P, onde P é a probabilidade da
resposta de Primok(n) ser errada. Calcule P)
d) Implemente Primo100(n) e aplique-o para testar a primalidade dos seguintes números:
•
•
•
•
•
•
•
•
•
98717
104297
101701
102073
104727
93943
1105
1729
29341
Os 3 primeiros números são realmente primos. Qual a resposta do algoritmo ?
Os 3 números seguintes não são primos. Qual a resposta do algoritmo ?
Os 3 últimos números são de Carmichael. Qua a resposta do algoritmo ?
Exercicio 8. Mostre que se d divide a e d divide b e d = ax + by para inteiros x, y então
necessariamente d = mdc(a,b).
Exercício 9. O algoritmo estendido de Euclides para calcular o mdc entre dois números
inteiros a, b é o seguinte algoritmo recursivo:
Extended-Euclid(a,b)
Input: dois inteiros a, b maiores ou iguais a 0
Output: 3 números (d,x,y) tais que d=ax + by e d = mdc(a,b)
1. If b = 0 return (1,0,a)
2. (x’,y’,d) = Extended-Euclid(b, a mod b)
3. return (y’, x’ – chão(a/b).y’, d)
a) Aplique o algoritmo estendido de Euclides para calcular mdc(25,11).
b) Aplique o algoritmo estendido de Euclides para calcular o inverso de 13 mod 25.
Exercício 10.
a) Se p é primo, p divide a.b e p não divide a então p divide b
b) Se p é primo e p divide a.b então p divide a ou p divide b.
Sugestão para (a) qual o mdc(a,p) ? Qual o mdc(pb, ab) ? Utilizar o exercicio 3 que permite
escrever o mdc de 2 números como combinação linear destes números.
Exercício 11. Seja p um número primo.
a) Mostre que todo número x, 1 ≤ x < p é inversível mod p (Sugestão: utilize o teorema de
Fermat ou o algoritmo estendido de Euclides – faça das duas maneiras !). Qual o inverso
de 15 mod 31 ?
b) Existem números x, 1 ≤ x < p, tais que seu inverso é ele próprio ? Quais são estes
números ?
c) Considere o Teorema de Wilson: p é primo se e somente se (p-1)! ≡ -1 mod p.
Assim, diferentemente do Teorema de Fermat, o Teorema de Wilson dá uma condição
necessária e suficiente para que um número seja primo. Você acha que poderíamos
utilizar este teorema para um teste de primalidade ?
Download