FACULDADE PITÁGORAS Curso Superior em Tecnologia Redes de Computadores e Banco de dados Matemática Computacional Prof. Ulisses Cotta Cavalca <[email protected]> TEORIA DOS NÚMEROS Belo Horizonte/MG 2014 1. INTRODUÇÃO O teoria dos conjuntos, ou simplesmente o estudo dos conjuntos numéricos, é uma importante ferramenta para a compreensão e entendimento de estruturas discretas, muito úteis na computação como um todo. Dessa forma: AB={ x / x ∈ A∧ x ∈ B } 2. DIVISÃO DEFINIÇÃO: Se a e b são inteiros com a≠0, dizemos que a divide b se há um inteiro c tal que b=ac. Quando a divide b, dizemos que a é fator de b, e b é múltiplo de a. A notação a|b significa a divide b. Determine: a) 3 | 7 c) 5 | 26 b) 4 | 12 d) 7 | 49 TEOREMA: Sejam a, b, e c números inteiros. Então: i. se a|b e a|c, então a|(b+c); ii. se a|b, então a|bc para todo c inteiro; iii. se a|b e b|c, então a|c. Verifique os valores de a, b e c abaixo, e os itens do teorema acima: a) a=2, b=4, c=8 c) 5 | 26 b) a=5, b=20, c=15 d) 7 | 49 COROLÁRIO: Se a, b, e c são números inteiros, tais que a|b e a|c, então a| (mb+nc) de modo que m e n são inteiros. TEOREMA (Algoritmo de divisão): Seja a inteiros e d um inteiro positivo. Então há valores inteiros únicos q e r, com 0 ≤ r < d, tal que a=dq+r. DEFINIÇÃO: Na equação dada no algoritmo de divisão, d é chamado de divisor, a é chamado de dividendo, q é chamado de quociente e r é chamado de resto. A notação usada para expressar quociente e resto, são, respectivamente: q = a div d r = a mod d Verifique o quociente e resto para cada um dos casos: a) 3 | 7 c) 5 | 26 b) 4 | 12 d) 7 | 49 DEFINIÇÃO: Sejam a, b números inteiros quaisquer e m um inteiro estritamente positivo. Diz-se que a é CÔNGRUO a b módulo m se m | (a-b) , isto é, se m divide (a-b) (a – b = mq para um conveniente inteiro q). Para indicar que a é côngruo a b, módulo m , usa-se a notação a ≡ b (mod m) TEOREMA: Sejam a, b números inteiros quaisquer e m um inteiro estritamente positivo. Então, a ≡ b (mod m) se e somente se a mod m = b mod m. TEOREMA: Seja m um número inteiro positivo. Os inteiros a e b números inteiros quaisquer e m um inteiro estritamente positivo. Então, a ≡ b (mod m) se e somente se a mod m = b mod m 3. APLICAÇÕES DE CONGRUÊNCIAS 3.1 Dígito verificador de CPF A congruência de números inteiros tem uma aplicação direta na determinação do digito verificador de um número CPF. Dado um endereço CPF, os 8 primeiros dígitos referem-se ao número do cidadão propriamente dito, o 9º dígito diz respeito à região fiscal, e o 10º e 11º dígito são de verificação. A Região Fiscal onde emitido o CPF (definida pelo nono dígito) tem a seguinte abrangência: 1 (DF-GO-MS-MT-TO), 2 (AC-AM-AP-PA-RORR), 3 (CE-MA-PI), 4 (AL-PB-PE-RN), 5 (BA-SE), 6 (MG), 7 (ES-RJ), 8 (SP), 9 (PR-SC) e 0 (RS). Para o número 332.512.981, determinado aleatoriamente, o cálculo dos dígitos verificadores é realizado da seguinte forma: Passo 1: Multiplica-se o 1º dígito por 1, o 2º dígito por 2, e assim por diante. Some todos os resultados desse produto e depois obtenha o módulo desse número por 11. 3 3 2 5 1 2 9 8 1 1 2 3 4 5 6 7 8 9 3 6 6 20 64 9 5 12 63 10º dígito = 188 mod 11 = 1 188 i=9 Matematicamente: d 10=( ∑ d i i )mod 11 i=1 Passo 2: Concateno o 10º dígito ao número inicial. Multiplica-se o 1º dígito por 0, o 2º dígito por 1, e assim por diante, até o 10º dígito por 9. Some todos os resultados desse produtos e depois obtenha o módulo desse número por 11. 3 3 2 5 1 2 9 8 1 1 0 1 2 3 4 5 6 7 8 9 0 3 4 15 8 9 4 10 54 56 11º dígito = 163 mod 11 = 9 163 i=10 Matematicamente: d 11=( ∑ d i (i−1))mod 11 i=1 Assim, o número CPF completo será 332.512.981-19 Verifique, a partir desse método, os dígitos verificadores do seu número CPF. 3.2 Funções Hash Hash é uma função matemática (ou estrutura de dados em ciência da computação) que traduz endereços de tamanho variável para tamanhos fixos. Sua principal aplicação está na alocação de endereços, como número de registro de clientes, endereço de memória virtual no contexto de sistemas operacionais, dentre outros. Em geral, uma função hash h atribui um endreço de memória h(k) a um registro que possui k como chave. Muitas funções matemáticas implementam algum mecanismo de hash. No entanto, a mais utilizada é: h(k) = k mod m em que m é o número de locações de memória disponíveis. Seja o número de registro 064212848, e m=111. Qual é o enderelo de memória alocado? h(064212848) = 064212848 mod 111 = 14 A função hash não é uma-para-um, pois existe mais de um possíve endereço de registro para a mesma locação de memória. Quando isso acontece, dizemos que ocorreu uma colisão de hash. Uma forma de resolver esse problema é associar, para o endereço de registro correspondente, o primeiro endereço de memória imediatamente livre. Considerando o exemplo anterior, o registro 107405723 estará alocado na posição 14. Como o registro 064212848 já está previamente alocado, o próximo endereço a ser alocado será 15. 3.3 Números pseudorandômicos O uso de números aleatórios é uma demanda frequente em simulações computacionais. Diferentes métodos foram concebidos para geração de números aleatórios, cada um deles com suas propriedades particulares. Números gerados por um método sistemático não são randômicos, e sim denominados como pseudorandômicos. O método mais comum usado para a geração de números pseudorandômicos é o método de congruência linear (MCL). Esse método foi desenvolvido por Lehmer, em 1951, em seus trabalhos com o computador ENIAC. O MCL funciona da seguinte forma: 1. Escolha 4 números inteiros: módulo (m), multiplicador (a), incremento (c), e semente (x0). 2. Considere as seguintes regras para escolha dos números inteiros: • 2≤a<m • 0≤c<m • 0 ≤ x0 < m 3. A sequência gerada será: xn+1 = (axn + c) mod m. Diversos experimentos computacionais requerem a geração de números pseudorandômicos entre 0 e 1. Para a geração desses números, basta dividir os números da sequência obtida pelo MCL pelo módulo m. Em outras palavras: x n/m. Em um exemplo, seja a sequência pseudorandômica de números gerada por m=9, a=7, c=4 e x0=3. • x1 = (7.x0 + 4) mod 9 = (7.3 + 4) mod 9 = 25 mod 9 = 7 • x2 = (7.x1 + 4) mod 9 = (7.7 + 4) mod 9 = 53 mod 9 = 8 • x3 = (7.x2 + 4) mod 9 = (7.8 + 4) mod 9 = 60 mod 9 = 6 • x4 = (7.x3 + 4) mod 9 = (7.6 + 4) mod 9 = 46 mod 9 = 1 • x5 = (7.x4 + 4) mod 9 = (7.1 + 4) mod 9 = 11 mod 9 = 2 • x6 = (7.x5 + 4) mod 9 = (7.2 + 4) mod 9 = 18 mod 9 = 0 • x7 = (7.x6 + 4) mod 9 = (7.0 + 4) mod 9 = 4 mod 9 = 4 • x8 = (7.x7+ 4) mod 9 = (7.4 + 4) mod 9 = 32 mod 9 = 5 • x9 = (7.x8 + 4) mod 9 = (7.5 + 4) mod 9 = 39 mod 9 = 3 Como x9=x0, e cada termo depende apenas do termo anterior, a sequência gerada (e repetida) é: 3, 7, 8, 6, 1, 2, 0, 4, 5, 3, 7, 8, 6, 1, 2, 0, 4, 5, …. Essa sequência contém 9 números diferentes antes de se inicar a repetição. A maioria dos computadores utiliza o MCL para a geração de números pseudorandômicos. Nesse caso, os valores típicos são: c=0, m=2 32-1 e a=75=16.807. Use o MCL para gerar uma seqüência de números aleatórios entre zero e 1, com os seguintes parâmetros: x0=27, a=17, c=43, e m=100. a) Qual é o intervalo em que os valores são gerados? b) Informe os 3 primeiros valores (x1, x2 e x3) dessa sequência. c) Informe esses 3 três valores (x1, x2 e x3) entre 0 e 1. 3.4 Criptografia Uma das aplicações mais significativas de congruência envolve o estudo de criptografia, ao qual constitui na análise de mensagens secretas. Um dos métodos mais antigos foi desenvolvido por Júlio César, cujo método é conhecido como criptografia de César. Para o envio de uma mensagem secreta, o método prevê que cada letra seja translada 3 posições adiante no alfabeto. Assim, a letra B é representada por E, X é representado por A, e assim por diante, Para expressar o processo de encriptação de César matematicamente, basta substituir cada letra por um inteiro entre 0 e 25. Por exemplo, substitui A por 0, C por 3, K por 10, Z por 25. O método de César pode ser representado pela função f, que atribui a um inteiro não negativo p, p ≤ 25, o inteiro f(p) no conjunto {0, 1, 2, …, 25} por: f(p) = (p+3) mod 26 Para recuperar a mensagem original (decriptação) do método de César, será usada a função inversa f-1. A função f-1 envia o inteiro p do conjunto {0, 1, 2, …, 25} para f-1(p)=(-3) mod 26. Em outras palavras, para encontrar a mensagem original, cada letra é transladada 3 posições para trás no alfabeto. O método de César generalizado pode ser descrito da seguinte forma: Encriptação: f(p) = (ap+b) mod 26 Decriptação: f-1(p) = (ap+b) mod 26 Use o método de César para encriptar o seu primeiro nome. a) Qual é a mensagem obtida, apenas deslocando 3 posições para cada letra? b) Qual é a mensagem obtida, utilizando a fórmula matemática. c) Realize o procedimento de decriptação da mensagem. d) Qual é a mensagem criptografada caso seja considerado f(p) = (3p+5) mod 26?