ILA - Unisinos
ILA - Unisinos
ILA - Unisinos
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.