Teorema (Algoritmo da Divisão) Sejam a e b números inteiros, com b > 0. Então existem números inteiros q e r, únicos e tais que a = bq + r, com 0 r < b. Demonstração. Existência: Consideremos S = {a bk k Z a bk 0}. Se 0 S, então b divide a. Fazendo q = a/b e r = 0 temos o pretendido. Suponhamos agora que 0 / S. Como 0 / S, temos que k Z, a bk, ou seja, b não divide a, donde a 0. Se a > 0, a b 0 S; se a < 0, a b(2a) = a(1 2b) S. Assim, pelo Princípio de Boa Ordenação, podemos afirmar que S tem um elemento mínimo, digamos r = a bq, para algum q Z. Assim obtemos que a = bq + r e r 0 (por definição de S), faltando provar que r < b. Suponhamos que r > b, então a b(q + 1) = a bq b = r b > 0. Deste modo a b(q + 1) S e a b(q + 1) < a bq, o que não pode ser, pois a bq é o elemento mínimo de S. Portanto, r b. Se r = b, então b = a bq, isto é, a b(q + 1) = 0. Assim 0 S o que contradiz a hipótese. Logo r < b. Unicidade de q e de r: Suponhamos que a = bq + r, com 0 r < b e a = bq + r, com 0 r < b. Podemos supor que r r. Temos que bq + r = bq + r, ou seja, b(q q ) = r r. Como b divide r r e 0 r r r < b, temos que r r = 0. Logo r = r e consequentemente q Álgebra (Curso de CC) = q. Ano lectivo 2005/2006 32 / 68
Os inteiros a e b referidos no teorema anterior designam-se por dividendo e divisor, respectivamente. Os inteiros q e r designam-se, respectivamente, por quociente e resto da divisão de a por b. Exemplo Para a = 27 e b = 6, o algoritmo da divisão dá 27 = 6 4 + 3. O algoritmo da divisão, para a e b inteiros positivos, pode ser descrito da forma seguinte. Algoritmo (Algoritmo da divisão) Input: dois números inteiros positivos a e b (a b) q 0; r 0; while (a q b b) do q q + 1; r a q b; fim; Output: dois números inteiros q e r tais que a = bq + r e 0 r < b Álgebra (Curso de CC) Ano lectivo 2005/2006 33 / 68
Exercício Escreva uma função GAP que efectue o algoritmo da divisão. Dados os inteiros positivos a e b deve devolver os valores de q e de r numa lista da forma [q, r]. Crie uma outra função que permita testar a função acabada de construir com valores gerados aleatoriamente (use a função RandomList). No GAP as funções QuoInt e RemInt permitem calcular, respectivamente, o quociente e o resto da divisão de dois números inteiros positivos. A função QuotientRemainder devolve uma lista com o quociente e o resto da divisão de dois números inteiros positivos. O operador mod calcula o resto da divisão de dois números inteiros quaisquer (sendo o divisor não nulo). gap> QuoInt(27,6); RemInt(27,6); 4 3 gap> QuotientRemainder(27,6); [ 4, 3 ] gap> 27 mod 6; 3 Álgebra (Curso de CC) Ano lectivo 2005/2006 34 / 68
Exercício Em Illinois (EUA) os últimos três dígitos da carta de condução são determinados pela fórmula: 31(m 1) + d + s, onde m é o número correspondente ao mês de nascimento, d é o dia de nascimento e s vale 0 se for homem e 600 se for mulher. Escreva um programa no GAP que, dados os três últimos dígitos de uma carta de condução emitida em Illinois, determine o sexo, o mês e o dia de nascimento do condutor. Teste o programa para os seguintes casos: 972 = 31 11 + 31 (mulher que nasceu em Dezembro, mês 12, no dia 31); 341 = 31 10 + 31 (número inválido); 001 = 31 0 + 1 (homem que nasceu em Janeiro, mês 1, no dia 1). Álgebra (Curso de CC) Ano lectivo 2005/2006 35 / 68
Definição (Máximo Divisor Comum) O máximo divisor comum de dois inteiros a e b não simultaneamente nulos é o maior de todos os divisores comuns a ambos. Vamos denotar este inteiro por mdc(a, b). Note-se que, se d divide a e b, então d também divide a e b. Assim, pretendendo encontrar o maior de todos os divisores comuns de dois inteiros, basta considerar divisores positivos, como se afirma na primeira parte da seguinte nota. Nota Sendo a e b inteiros não simultaneamente nulos, (i) mdc(a, b) = max{k N k a k b}; (ii) mdc(a, b) = mdc(b, a); (iii) mdc(a, 0) = a. Álgebra (Curso de CC) Ano lectivo 2005/2006 36 / 68
No GAP a função DivisorsInt dá uma lista dos divisores positivos de um inteiro não nulo. Exemplo Determinação (pela definição) de mdc(16, 20) (fazendo uso do GAP): gap> D16:=DivisorsInt(16); [ 1, 2, 4, 8, 16 ] gap> D20:=DivisorsInt(20); [ 1, 2, 4, 5, 10, 20 ] gap> DC:=Intersection(D16,D20); [ 1, 2, 4 ] gap> Maximum(DC); 4 Exercício Construa uma função GAP para determinar o máximo divisor comum de dois números inteiros não simultaneamente nulos, com base na definição. Álgebra (Curso de CC) Ano lectivo 2005/2006 37 / 68
Proposição (Euclides) Sejam a e b inteiros positivos e seja a = qb + r, com q, r Z e 0 r < b. Então mdc(a, b) = mdc(b, r). Demonstração. Para provar que mdc(a, b) = mdc(b, r) basta provar que {k N k a k b} = {k N k b k r}. : Se k a e k b, para algum k N, então k a qb = r. : Se k b e k r = a qb, para algum k N, então k a qb + qb = a. Exemplo Vamos determinar mdc(154, 105). 154 = 105 1 + 49 (mdc(154, 105) = mdc(105, 49)) 105 = 49 2 + 7 (mdc(105, 49) = mdc(49, 7)) 49 = 7 7 + 0 (mdc(49, 7) = mdc(7, 0)) Assim, mdc(154, 105) = mdc(105, 49) = mdc(49, 7) = mdc(7, 0) = 7. Álgebra (Curso de CC) Ano lectivo 2005/2006 38 / 68
Este processo (designado por Algoritmo de Euclides) permite determinar mdc(a, b), a e b inteiros positivos, realizando divisões sucessivas de forma a encontrar uma sequência decrescente de inteiros r 1 > r 2 >... > r k tais que: a = bq 1 + r 1 0 < r 1 < b b = r 1 q 2 + r 2 0 < r 2 < r 1 r 1 = r 2 q 3 + r 3 0 < r 3 < r 2 r k 2 = r k 1 q k + r k 0 < r k < r k 1 r k 1 = r k q k+1 + 0 mdc(a, b) é igual a r k, o resto que antecede o resto nulo. Álgebra (Curso de CC) Ano lectivo 2005/2006 39 / 68
Algoritmo (Algoritmo de Euclides) Input: dois números inteiros positivos a e b r 1 a; r 2 b; while r 2 0 do r 0 r 1; r 1 r 2; r 2 r 0 mod r 1; end; Output: r 1, o maximo divisor comum de a e b Exercício Construa uma função GAP que, dados dois números inteiros positivos, determine através do Algoritmo de Euclides o seu máximo divisor comum. Álgebra (Curso de CC) Ano lectivo 2005/2006 40 / 68
Exemplo Vamos aplicar o Algoritmo de Euclides para determinar mdc(3150, 495). 3150 = 495 6 + 180 495 = 180 2 + 135 180 = 135 1 + 45 135 = 45 3 + 0 Resulta que mdc(3150, 495) = 45. As igualdades anteriores permitem escrever 45 como uma combinação linear de 3150 e 495: 45 = mdc(3150, 495) = 180 135 1 = 180 1 (495 2 180) = 3 180 1 495 = 3 (3150 6 495) 1 495 = 3 3150 19 495 = 3 3150 + ( 19) 495 Encontrámos inteiros x e y (x = 3 e y = 19) tais que mdc(3150, 495) = x 3150 + y 495. Álgebra (Curso de CC) Ano lectivo 2005/2006 41 / 68
Teorema (MDC como combinação linear) Sejam a e b inteiros não simultaneamente nulos. Então existem inteiros x e y tais que mdc(a, b) = xa + yb. Além disso, mdc(a, b) é o menor inteiro positivo da forma xa + yb. Demonstração. Seja S = {ma + nb m, n inteiros e ma + nb > 0}. Como S é não vazio (se uma escolha de m e n faz ma + nb < 0, então substitui-se m e n por m e n, obtendo, assim, um elemento de S), o Princípio de Boa Ordenação diz que S tem um elemento mínimo, digamos d = xa + yb, onde x e y são inteiros. Vejamos que d = mdc(a, b). O Algoritmo da Divisão permite escrever a = dq + r, com 0 r < d. Vamos supor que r > 0. Assim, r = a dq = a (xa + yb)q = a xaq ybq = (1 xq)a + ( yq)b S, contradizendo o facto de que d é o elemento mínimo de S. Logo r = 0 e d divide a. De forma análoga prova-se que d divide b. Isto prova que d é um divisor comum de a e b. Resta provar que d é o menor divisor comum de a e b. Suponhamos que d é outro divisor comum de a e b. Então, para alguns g e h inteiros, a = d g e b = d h. Assim, d = xa + yb = x(d g) + y(d h) = d (xg + yh), portanto d é um divisor de d. Logo, d é o maior de todos os divisores comuns a a e b. Álgebra (Curso de CC) Ano lectivo 2005/2006 42 / 68
Algoritmo (Algoritmo de Euclides - versão alargada) Input: dois números inteiros positivos a e b r 1 a; r 2 b; x 1 1; x 2 0; y 1 0; y 2 1; while r 2 0 do end; r 0 r 1; r 1 r 2; x 0 x 1; x 1 x 2; y 0 y 1; y 1 y 2; q QuocienteInteiro(r 0, r 1); r 2 r 0 q r 1; x 2 x 0 q x 1; y 2 y 0 q y 1; Output: inteiros x 1 e y 1 tais que r 1 = mdc(a, b) = x 1 a + y 1 b Álgebra (Curso de CC) Ano lectivo 2005/2006 43 / 68
Existem no GAP as funções GcdInt e Gcdex para determinar o máximo divisor comum de dois inteiros não simultaneamente nulos. Esta última, encontra os números necessários para escrever o máximo divisor comum como uma combinação linear. gap> GcdInt(2520,154); 14 gap> Gcdex(2520,154); rec(gcd:=14,coeff1:=3,coeff2:=-49,coeff3:=-11,coeff4:=180) No output da função Gcdex, coeff1 e coeff2 são os inteiros x e y necessários para escrever mdc(a, b) = xa + yb e coeff3 e coeff4 são inteiros m e n tais que 0 = ma + nb. No caso do exemplo, o output diz-nos que mdc(2520, 154) = 14, que mdc(2520, 154) = 2520 3 + 154 ( 49) e, ainda, que 0 = 2520 ( 11) + 154 180. Álgebra (Curso de CC) Ano lectivo 2005/2006 44 / 68
Teorema (Caracterização do máximo divisor comum) Sejam a, b, d Z +. As afirmações seguintes são equivalentes: (i) d = mdc(a, b). (ii) d é um divisor comum de a e b tal que todo o divisor comum de a e b divide d. (iii) d é o menor inteiro positivo da forma xa + yb, com x, y inteiros, isto é, d = min{i N x, y Z : i = xa + yb}. Demonstração. (i) (ii) Seja d = mdc(a, b). Então d = xa + yb, para alguns inteiros x e y. Se c é um divisor comum de a e b, então c xa + yb = d. (ii) (i) Seja D um divisor comum de a e b tal que todo o divisor comum de a e b divide D. Como mdc(a, b) é um divisor comum de a e b, então mdc(a, b) divide D e, portanto, mdc(a, b) D. Por outro lado, D não pode ser maior que o máximo divisor comum de a e b. Logo, D tem que ser igual a mdc(a, b). (i) (iii) Já foi provado no teorema anterior. Na demonstração da proposição seguinte intervém (iii), isto é, o facto de mdc(a, b) ser o menor inteiro positivo que se pode escrever como combinação linear de a e b. Álgebra (Curso de CC) Ano lectivo 2005/2006 45 / 68
Proposição Sejam a e b inteiros positivos. (i) Sendo n N, tem-se mdc(na, nb) = n mdc(a, b). (ii) Se d for um divisor comum positivo de a e b, então mdc ( a d, ) b d = 1 d mdc(a, b). Demonstração. (i) Existem x, y, r, s Z tais que mdc(na, nb) = xna + ynb e mdc(a, b) = ra + sb. Então, mdc(na, nb) = xna + ynb = n(xa + yb) n mdc(a, b). A outra desigualdade: n mdc(a, b) = n(ra + sb) = nra + nsb mdc(na, nb). (ii) Seja d um divisor positivo comum a a e a b. Utilizando (i) temos que mdc(a, b) = mdc `d a, d ` b d d = d mdc a,. b d d Quando mdc(a, b) = 1, os inteiros a e b dizem-se primos entre si. Proposição Sejam a, b e c inteiros, com a e b primos entre si. Se a bc, então a c. Demonstração. Tem-se bc = ka e ax + by = 1, para certos inteiros k, x, y. Assim, c = c 1 = c(ax + by) = cax + cby = cax + kay = a(cx + ky). Logo, a c. Álgebra (Curso de CC) Ano lectivo 2005/2006 46 / 68