14.03.2015 Views

ILA - Unisinos

ILA - Unisinos

ILA - Unisinos

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Aprendendo a Programar Programando numa Linguagem Algorítmica Executável (<strong>ILA</strong>) - Página 16<br />

2. O algoritmo abaixo determina o menor divisor maior que 1 de um inteiro dado. A idéia é<br />

verificar se d = 2 é divisor e, não sendo, verificar se 3 ou 4 ou 5, etc, é divisor. A procura por um<br />

divisor vai até que um divisor seja encontrado. Naturalmente, utilizando o algoritmo anterior, o<br />

nosso processador agora sabe determinar o resto da divisão inteira de um inteiro x por outro inteiro<br />

y não nulo. Isto será indicado por Resto(x, y). Para encontrar um divisor de n basta encontrar um<br />

inteiro d tal que Resto(n, d) = 0.<br />

1. Chame de N o inteiro dado.<br />

2. Faça D = 2.<br />

3. Repita 3.1 enquanto Resto(N, D) ≠ 0<br />

3.1 Substitua D por D + 1<br />

4. Forneça D para o divisor procurado.<br />

3. Como se depreende facilmente da sua denominação, o máximo divisor comum (mdc) de<br />

dois números dados é o maior número que os divide. Antes o mdc só era utilizado para<br />

simplificações de frações ordinárias; atualmente ele é utilizado na determinação de chaves públicas<br />

para sistemas de criptografia RSA [Evaristo, J, 2010]. Por exemplo, mdc(64, 56) = 8. De maneira<br />

óbvia, o algoritmo abaixo determina o mdc de dois números dados:<br />

1. Chame de x e de y os números.<br />

2. Determine D(x), o conjunto dos divisores de x.<br />

3. Determine D(y), o conjunto dos divisores de y.<br />

4. Determine I, a interseção de D(x) e D(y).<br />

5. Determine M, o maior elemento do conjunto I.<br />

6. Forneça M como o mdc procurado.<br />

O cálculo de mdc(120, 84) com este algoritmo seria:<br />

1. x = 120, y = 84.<br />

2. D(120) = {1, 2, 3, 4, 5, 6, 8, 10, 12, 15, 20, 24, 30, 40, 60, 120}.<br />

3. D(84) = {1, 2, 3, 4, 6, 7, 12, 14, 21, 28, 42, 84}.<br />

4. I = {1, 2, 3, 4, 6, 12}.<br />

5. M = 12.<br />

Observe que o algoritmo anterior determina o menor divisor de um inteiro não determinando<br />

todos os divisores, como necessário neste exemplo. Observe também que estamos supondo que o<br />

nosso processador é capaz de determinar a interseção de dois conjuntos.<br />

A Matemática fornece uma outra forma de se calcular o mdc de dois inteiros: determina-se a<br />

decomposição em fatores primos dos dois inteiros e o mdc é o produto dos fatores primos comuns<br />

as duas decomposições com as menores multiplicidades.<br />

Para o exemplo dado acima teríamos:<br />

120 2 84 2<br />

60 2 42 2<br />

30 2 21 3<br />

15 3 7 7<br />

5 5 1<br />

1 1<br />

o que nos dá 120 = 2 3 x3x5 e 84 = 2 2 x3x7 e, portanto, mdc(120, 84) = 2 2 x3 = 12.<br />

Vale observar que escrever este algoritmo na linguagem informal que estamos utilizando é<br />

bastante complicado.<br />

Na há dúvida que o primeiro algoritmo para o cálculo do mdc apresentado é de compreensão<br />

bastante simples. Porém, comentaremos posteriormente que ele é computacionalmente bastante<br />

ineficiente no sentido de que sua execução pode, dependendo dos valores de x e y, demandar um<br />

tempo acima do razoável.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!