Cap´ıtulo 2 Divisibilidad en Z - IMERL

Cap´ıtulo 2 Divisibilidad en Z - IMERL Cap´ıtulo 2 Divisibilidad en Z - IMERL

imerl.fing.edu.uy
from imerl.fing.edu.uy More from this publisher
07.05.2013 Views

28 CAPÍTULO 2. DIVISIBILIDAD EN Z Definición 2.7 (Máximo común divisor) Si d|a y d|b decimos que d es un divisor común (o factor común) de a y b; por ejemplo, 1 es un divisor común a cualquier par de enteros a y b. Si a y b no son los dos nulos, el Teorema 2.6 prueba que ninguno de sus divisores comunes puede ser mayor que max(|a|, |b|), por lo que podemos asegurar que de entre todos sus divisores comunes debe existir uno que sea el mayor de ellos. Este es el máximo común divisor de a y b que denotaremos por mcd(a, b); siendo el único entero d que satisface d|a y d|b (por ser d un divisor común), Si c|a y c|b, c|d (pues d es el mayor de los divisores comunes de a y b). Sin embargo, el caso a = b = 0 debe ser excluido; cualquier entero divide a 0 y es, por tanto, un divisor común de a y b, por lo que, en este caso, no existe un máximo común divisor. Esta definición puede obviamente extenderse al máximo común divisor de cualquier conjunto finito de enteros (no todos nulos). Nota. Dos números enteros a y b se dicen coprimos o primos entre sí si no poseen factores comunes no triviales, esto es, si mcd(a, b) = 1. Al igual que hicimos con la divisibilidad, recogemos en la siguiente Proposición algunas propiedades básicas del máximo común divisor. Proposición 2.8 En las propiedades siguientes todos los números son enteros y |a| denotará el valor absoluto de a. 1) mcd(a, b) = mcd(b, a), 2) mcd(a, b, c) = mcd(mcd(a, b), c) = mcd(a, mcd(b, c)), 3) mcd(a, 0) = mcd(a, a) = |a|, 4) mcd(a, b) = mcd(−a, b) = mcd(|a|, |b|), 5) mcd(ca, cb) = |c|mcd(a, b), 6) mcd(a, b) = mcd(a, b + ac), a 7) mcd mcd(a, b) , a = 1, mcd(a, b) Una de las primeras aplicaciones del máximo común divisor que suele realizarse en la escuela es la reducción del tamaño de numerador y denominador en la aritmética con números racionales. Obviamente, esto requerirá, sobre todo si se piensa en números

2.2. ALGORITMO DE EUCLIDES. TEOREMA DE LAMÉ 29 de gran tamaño, de un algoritmo eficiente 1 para su cálculo. Afortunadamente (no siempre es el caso para otros problemas) se dispone de un método que, sorprendentemente, se hallaba ya en los Elementos de Euclides. Según D. Knuth, the oldest nontrivial algorithm that has survived to the present day. 2.2. Algoritmo de Euclides. Teorema de Lamé Trataremos, en esta Sección, de construir un algoritmo eficiente para el cálculo del máximo común divisor y estudiar algunas de sus propiedades. Naturalmente, la propia definición de máximo común divisor proporciona un algoritmo para calcular mcd(a, b): construir la lista de divisores de a y b y tomar el mayor de los comunes. Sin embargo, para grandes números, este algoritmo es, ciertamente, inaplicable. El algoritmo de Euclides que estudiaremos para el cálculo del máximo común divisor se basa en la sencilla observación siguiente: d|a y d|b ⇐⇒ d|a y d|r, siendo r el resto de la división de a por b. Esto quiere decir que los divisores comunes de a y b son los divisores comunes de a y r, por lo que mcd(a, b) = mcd(b, r). El algoritmo de Euclides explota la idea anterior para simplificar el cálculo del máximo común divisor reduciendo el tamaño de los enteros sin alterar su máximo común divisor. Eliminando casos triviales, podemos suponer que a > b > 0. Sean r0 = a, r1 = b. Dividiendo, se tendrá que r0 = q1r1 + r2 con 0 ≤ r2 < r1 = b. Si r2 = 0, entonces b|a, por lo que mcd(a, b) = b y hemos terminado. Si r2 = 0, dividimos r1 entre r2 y escribimos r2 = q2r2 + r3 con 0 ≤ r3 < r2 y repetimos el proceso. Dado que la sucesión de restos es decreciente (r1 > r2 > r3 > ...), en algún momento habremos de encontrar un resto rn+1 igual a 0. Los dos últimos pasos podemos escribirlos de la forma rn−2 = qn−1rn−1 + rn con 0 < rn < rn−1, y rn−1 = qnrn + rn+1 con rn+1 = 0. Teorema 2.9 En el proceso anterior, rn es el máximo común divisor de a y b. Además, el máximo común divisor es único. 1 En el contexto informático, eficiente quiere decir que, una vez convenientemente programado, pueda ser ejecutado por un ordenador en un tiempo y utilización de recursos de memoria razonables. No nos entretendremos en discutir qué quiere decir razonable, que sería objeto de la asignatura Complejidad Computacional u otras.

2.2. ALGORITMO DE EUCLIDES. TEOREMA DE LAMÉ 29<br />

de gran tamaño, de un algoritmo efici<strong>en</strong>te 1 para su cálculo. Afortunadam<strong>en</strong>te (no<br />

siempre es el caso para otros problemas) se dispone de un método que, sorpr<strong>en</strong>d<strong>en</strong>tem<strong>en</strong>te,<br />

se hallaba ya <strong>en</strong> los Elem<strong>en</strong>tos de Euclides. Según D. Knuth, the oldest<br />

nontrivial algorithm that has survived to the pres<strong>en</strong>t day.<br />

2.2. Algoritmo de Euclides. Teorema de Lamé<br />

Trataremos, <strong>en</strong> esta Sección, de construir un algoritmo efici<strong>en</strong>te para el cálculo del<br />

máximo común divisor y estudiar algunas de sus propiedades. Naturalm<strong>en</strong>te, la<br />

propia definición de máximo común divisor proporciona un algoritmo para calcular<br />

mcd(a, b): construir la lista de divisores de a y b y tomar el mayor de los comunes.<br />

Sin embargo, para grandes números, este algoritmo es, ciertam<strong>en</strong>te, inaplicable.<br />

El algoritmo de Euclides que estudiaremos para el cálculo del máximo común divisor<br />

se basa <strong>en</strong> la s<strong>en</strong>cilla observación sigui<strong>en</strong>te:<br />

d|a y d|b ⇐⇒ d|a y d|r,<br />

si<strong>en</strong>do r el resto de la división de a por b. Esto quiere decir que los divisores comunes<br />

de a y b son los divisores comunes de a y r, por lo que mcd(a, b) = mcd(b, r).<br />

El algoritmo de Euclides explota la idea anterior para simplificar el cálculo del<br />

máximo común divisor reduci<strong>en</strong>do el tamaño de los <strong>en</strong>teros sin alterar su máximo<br />

común divisor. Eliminando casos triviales, podemos suponer que a > b > 0. Sean<br />

r0 = a, r1 = b. Dividi<strong>en</strong>do, se t<strong>en</strong>drá que r0 = q1r1 + r2 con 0 ≤ r2 < r1 = b.<br />

Si r2 = 0, <strong>en</strong>tonces b|a, por lo que mcd(a, b) = b y hemos terminado. Si r2 = 0,<br />

dividimos r1 <strong>en</strong>tre r2 y escribimos r2 = q2r2 + r3 con 0 ≤ r3 < r2 y repetimos<br />

el proceso. Dado que la sucesión de restos es decreci<strong>en</strong>te (r1 > r2 > r3 > ...), <strong>en</strong><br />

algún mom<strong>en</strong>to habremos de <strong>en</strong>contrar un resto rn+1 igual a 0. Los dos últimos<br />

pasos podemos escribirlos de la forma rn−2 = qn−1rn−1 + rn con 0 < rn < rn−1, y<br />

rn−1 = qnrn + rn+1 con rn+1 = 0.<br />

Teorema 2.9 En el proceso anterior, rn es el máximo común divisor de a y b.<br />

Además, el máximo común divisor es único.<br />

1 En el contexto informático, efici<strong>en</strong>te quiere decir que, una vez conv<strong>en</strong>i<strong>en</strong>tem<strong>en</strong>te programado,<br />

pueda ser ejecutado por un ord<strong>en</strong>ador <strong>en</strong> un tiempo y utilización de recursos de memoria razonables.<br />

No nos <strong>en</strong>tret<strong>en</strong>dremos <strong>en</strong> discutir qué quiere decir razonable, que sería objeto de la asignatura<br />

Complejidad Computacional u otras.

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

Saved successfully!

Ooh no, something went wrong!