UNIJUÍ - UNIVERSIDADE REGIONAL DO NOROESTE DO ESTADO DO RIO GRANDE DO SUL. DCEEng - DEPARTAMENTO DE CIÊNCIAS EXATAS E ENGENHARIAS

Tamanho: px
Começar a partir da página:

Download "UNIJUÍ - UNIVERSIDADE REGIONAL DO NOROESTE DO ESTADO DO RIO GRANDE DO SUL. DCEEng - DEPARTAMENTO DE CIÊNCIAS EXATAS E ENGENHARIAS"

Transcrição

1 UNIJUÍ - UNIVERSIDADE REGIONAL DO NOROESTE DO ESTADO DO RIO GRANDE DO SUL DCEEng - DEPARTAMENTO DE CIÊNCIAS EXATAS E ENGENHARIAS CURSO DE GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO COMPLEXIDADE COMPUTACIONAL NO CÁLCULO DE NÚMEROS PRIMOS E PERFEITOS MAURI JOSÉ KLEIN Santa Rosa, RS - Brasil. 2012

2 UNIJUÍ - UNIVERSIDADE REGIONAL DO NOROESTE DO ESTADO DO RIO GRANDE DO SUL DCEEng - DEPARTAMENTO DE CIÊNCIAS EXATAS E ENGENHARIAS CURSO DE GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO COMPLEXIDADE COMPUTACIONAL NO CÁLCULO DE NÚMEROS PRIMOS E PERFEITOS MAURI JOSÉ KLEIN Trabalho de Conclusão de Curso apresentado ao curso de Ciência da Computação, do Departamento de Ciências Exatas e Engenharias, da Universidade Regional do Noroeste do Estado do Rio Grande do Sul, como requisito parcial para obtenção do grau de Bacharel em Ciência da Computação. Orientador: Professor Doutor GERSON BATTISTI Santa Rosa RS 2012

3 COMPLEXIDADE COMPUTACIONAL NO CÁLCULO DE NÚMEROS PRIMOS E PERFEITOS MAURI JOSÉ KLEIN Trabalho de Conclusão de Curso apresentado ao curso de Ciência da Computação, do Departamento de Ciências Exatas e Engenharias, da Universidade Regional do Noroeste do Estado do Rio Grande do Sul, como requisito parcial para obtenção do grau de Bacharel em Ciência da Computação. Orientador: Prof. (Doutor). GERSON BATTISTI BANCA EXAMINADORA Prof. (Mestre) VINÍCIUS MARAN Santa Rosa RS 2012

4 Os primos são as pérolas que adornam a vastidão infinita do universo de números que os matemáticos exploraram ao longo dos séculos. Eles despertam a admiração dos matemáticos: 2, 3, 5, 7, 11, 13, 17, 19, 23 números eternos que existem em uma espécie de mundo independente de nossa realidade física. São um presente da natureza para o matemático. (MARCUS DU SAUTOY, 2007, p.11).

5 Dedicatória Ao meu pai Arno João Klein, pela inspiração proporcionada para os estudos, principalmente pelo fascínio aos números. Aos meus filhos Keila Caroline e Bruno Daniel e a minha esposa Marlise Inês Seibt, um grande beijo.

6 AGRADECIMENTOS Agradeço ao meu Professor Orientador Gerson Battisti, que foi a primeira pessoa que tive contato na universidade e que desde o início me motivou com os seus desafios. Lembro-me do primeiro dia de aula, no componente Algoritmos, o desafio dos Jesuítas e dos Canibais. Pois também foi assim que surgiu o interesse pelo assunto do meu TCC, que foi colocado como desafio em uma aula de programação. Obrigado prof. Gerson. Obrigado também a todos os professores que tive durante os 4 anos, que foram todos muito respeitosos e eficientes proporcionando o aprendizado. Especialmente agradeço ao meu filho Bruno Daniel, pela inspiração e pela motivação que me proporcionou ao longo dos quatro anos de curso. A minha filha Keila Caroline, que se fez presente entre nós no decorrer da minha caminhada como universitário. Com ela veio uma nova motivação para que a caminhada fosse concluída com êxito. E a minha esposa Marlise Inês Seibt que por horas assumia todos os compromissos para que pudesse me dedicar aos estudos.

7 RESUMO Fatorar um número de 12 milhões de dígitos ou confirmar sua primalidade não é trivial. Os números primos são conhecidos e estudados há séculos por cientistas e pesquisadores de diversas áreas, que dedicam suas vidas para desvendar alguma particularidade desta classe de números tão singular. Com o advento da computação e a capacidade de processamento das máquinas, os estudos vêm evoluindo com muita rapidez, porém o custo computacional ainda é muito grande, levando-se em consideração, por exemplo, o teste de primalidade de Por esta dificuldade de fatoração, utilizam-se os números primos na criptografia de dados para transmissão pela web, principalmente o Modelo de Criptografia RSA, que consiste basicamente na obtenção de dois números primos enormes como base para criação da chave pública para cifrar os dados. Assim, fica praticamente impossível alguém obter os divisor do número e achar a chave privada para decifrar os dados. Este trabalho visa quantificar e especificar a complexidade destes cálculos, e conhecer mais um pouco destes números especiais. Palavras-Chave: primos; mersenne; perfeitos; criptografia; complexidade;

8 ABSTRACT Factoring a number of 12 million digits or confirm its primality is not trivial. Prime numbers are known and studied for centuries by scientists and researchers from various fields who dedicate their lives to uncover some peculiarity of this class of numbers so unique. With the advent of computing and processing capability of the machines, studies have evolved very quickly, but the computational cost is still too great, taking into account, for example the test of primality By factoring this difficulty, we use prime numbers to encrypt data for transmission over the web. The model basically consists RSA Encryption in getting two huge prime numbers as the basis for creating the public key to encrypt the data. Thus, it is virtually impossible for anyone to get the divisor of the number and find the private key to decrypt the data. Quantify and specify the complexity of these calculations is to know a little more of these special numbers. Keywords: prime; Mersenne; perfect; cryptography; complexity;

9 LISTA DE SIGLAS - Raíz quadrada; - Aproximadamente; - Congruência; µs - Milissegundos; A.C - Antes de Cristo; AKS - Manindra Agrawal, Neeraj Kayal e Nitin Saxena; ASCII - American Standard Code for Information Interchange Cong. - Congruência; FFT - Transformada Rápida de Fourier; Hs. - Horas; IDE - Integrated Development Environment; log - Logaritmo; MDC - Mínimo Divisor Comum; Min. - Minutos; Mod. - Módulo; O - Ó Grande; P - Polinomial; PE. - Padre; Pg. - Página; PT - Pontos; RSA - Ronald Rivest, Adi Shamir e Leonard Adleman S - Segundos; WEB - World Wide Web; Ω - Ômega; Ө - Theta;

10 LISTA DE FIGURAS Figura 1: Pseudocódigo para teste de primalidade; Figura 2: Notação O; g(n) O f(n) Figura 3: Notação Ω; g(n) Ω f(n) Figura 4: Notação Ө; g(n) Ө f(n) Figura 5: Exemplo de Criptografia RSA Figura 6: Algoritmo Força Bruta em JAVA Figura 7: Exemplo do Crivo de Erastóstenes até o número Figura 8: Algoritmo do crivo de Erastóstenes; Figura 9: Exemplo do teste de Lucas-Lehmer Figura 10: Número gerado com p=607: Figura 11: Algoritmo em Java do teste de Lucas-Lehmer Figura 12: Algoritmo Java do Teorema de Fermat Figura 13: Algoritmo para o teste dos números primos de Sophie Germain Figura 14: Diagrama Conceitual Java Figura 15: Congruência Prima mod. 30 x Força Bruta Figura 16: Incidência de Falsos Primos em cada intervalo Figura 17: Algoritmo congruência 11, 23, 59 mod Figura 18: Exemplo de divisibilidade de um número de mersenne Figura 19: Crivo de Erastóstenes x Força Bruta Figura 20: Lucas-Lehmer X Força Bruta Figura 21: Teorema de Fermat x Força Bruta

11 LISTA DE QUADROS Quadro 1: Tamanho do Problema x Tempo de Execução Quadro 2: Complexidade Melhor Caso para teste de primalidade; Quadro 3: Complexidade Caso Médio para teste de primalidade Quadro 4: Complexidade Caso Médio para teste de primalidade Quadro 5: Probabilidade de incidência de números perfeitos Quadro 6: Lista de números perfeitos Quadro 7: fatores primos de números inteiros positivos Quadro 8: Semi-primo e fatores do desafio RSA Laboratories Quadro 9: Exemplos de prova da infinitude dos números primos Quadro 10: Tempo de execução do algoritmo de força bruta Quadro 11: Analise do crivo de Erastóstenes Quadro 12: Análise do teste de Lucas-Lehmer Quadro 13: Números primos de Sophie Germain ente 1 e Quadro 14: Congruência pelo método binário Quadro 15: Congruência mod. 30 num determinado intervalo de números Quadro 16: Congruência Prima mod. 30 x Força Bruta Quadro 17: Incidência de primos e falsos primos com cong. 11, 23 e 59 mod Quadro 18: Lista de Falsos Primos com Congruência 11, 23, 59 mod Quadro 19: Crivo de Erastóstenes x Força Bruta Quadro 20: Lucas-Lehmer X Força Bruta Quadro 21: Teorema de Fermat x Força Bruta

12 SUMÁRIO INTRODUÇÃO COMPLEXIDADE COMPUTACIONAL DE ALGORITMOS MEDIDAS DE COMPLEXIDADE Melhor Caso Caso Médio Pior Caso NOTAÇÕES DE COMPLEXIDADE Notação O Notação Ω Notação Ө TEORIA DOS NÚMEROS NÚMEROS PERFEITOS NÚMEROS PRIMOS Aplicações, Pesquisas e Premiações Infinitude dos Números Primos Criptografia RSA DERIVAÇÕES DE NÚMEROS PRIMOS Força Bruta O Crivo de Erastóstenes Teste de Lucas Lehmer O Teorema de Fermat Algoritmo AKS Primos de Sophie Germain ANÁLISE E AVALIAÇÃO DE ALGORÍTMOS JAVA E IDE NETBEANS Classe BigInteger Principais Métodos Utilizados MÉTODO BINÁRIO PARA DIVISÃO DE GRANDES NÚMEROS... 60

13 4.3. CONSTATAÇÕES ATRAVÉS DE TESTES OU PROVAS MATEMÁTICAS Congruência prima mod Congruência 11, 23 ou 59 mod Divisores de Números de Mersenne são da Forma 2kp Comparações entre os principais algoritmos: CONSIDERAÇÕES FINAIS BIBLIOGRAFIA... 76

14 14 INTRODUÇÃO Enquanto Dario I rei da Pérsia ( A.C) contava os dias através de nós em barbantes e outros povos ainda mais antigos controlavam suas informações contábeis representadas em peças de diferentes formatos e armazenadas em urnas de barro (IFRAH, 1947), temos hoje acessibilidade a computadores com grande poder computacional capazes de gerar um número com mais de mil páginas em poucos segundos, especificamente, neste caso, através de uma equação matemática proposta por Marin mersenne para gerar um tipo especial de números os números de mersenne. Neste contexto podemos dizer que os números primos desafiam a capacidade do ser humano. A singularidade destes números é fascinante. Matemáticos de todas as partes do mundo buscam explicações, novas teorias, conjecturas ou tentam provar algumas já existentes. Este estudo já se estendeu para outras áreas de pesquisa. Cientistas da computação são potencialmente capazes e de fundamental importância para esta pesquisa, devido à complexidade dos cálculos que precisam ser feitos. A hipótese de Riemann contextualizada e exemplificada por Clay Mathematics Institute em seu site foi um passo dado apenas com um pé, e continua sendo um dos principais desafios que os intrigados cientistas e alguns aventureiros tentam provar. Ela consiste, basicamente, na relação dos números primos entre si. Outra classe de números especiais está diretamente ligada com os números primos: os números perfeitos. Os números perfeitos são produto da multiplicação tendo como um dos fatores um número primo gerado pela equação de mersenne. Sabendo-se que um número de mersenne é primo, pode-se obter um número perfeito. O maior número primo, que também é primo de mersenne, encontrado e confirmado até a data deste trabalho possui mais de 12 milhões de dígitos ( dígitos), ou mais de 5 mil páginas com letra tamanho 10 PT. Como o número perfeito é gerado pela multiplicação deste número pelo número gerado com o expoente imediatamente inferior, chega-se a um número perfeito de mais de 25 milhões de dígitos ( dígitos). Com isto percebemos o grau de complexidade que estes cálculos produzem. Estudar esta complexidade é o objetivo deste trabalho (GIMPS, 2012).

15 15 Todos estes conceitos podem parecer complexos e matemáticos demais para serem abordados em Ciência da Computação, entretanto, é sabido que a matemática constitui a base de toda computação. Ainda assim podemos questionar a importância de um trabalho que pretende desvendar mais uma fração de um dos problemas mais intrigantes já vistos pela humanidade: os números primos. Em 2002 três cientistas publicaram o trabalho Primes is in P, primeiro algoritmo que determina se um número é primo em tempo polinomial. Nos anos seguintes foram feitas melhorias no algoritmo, reduzindo ainda mais o tempo de processamento, porém como a entrada é excessivamente grande, o custo computacional continua elevado, e, sendo assim, ainda não é suficientemente rápido para ameaçar a segurança dos dados da rede mundial de computadores. Como vimos, têm-se motivos suficientes para pesquisar e estudar estas duas classes de números e a sua complexidade computacional e tentar aumentar a eficiência no cálculo destes números, através da implementação de novos algoritmos, utilizando algumas constatações feitas durante o desenvolvimento do trabalho. Além da importância acadêmica e do reconhecimento que este trabalho pode proporcionar, o mesmo ainda envolverá conceitos de segurança eletrônica utilizada na criptografia de dados e a sua relação com os números primos, dando assim aplicação concreta para este trabalho. Sabe-se que a complexidade dos cálculos e a inexistência de uma equação que seja capaz de gerar números primos, foi o motivo pelo qual três cientistas utilizaram os números primos para desenvolver o sistema de criptografia RSA que é utilizado atualmente para transmissão de dados pela WEB (COUTINHO, 2000). Sem a criptografia não seria possível fazer transações bancarias, compras e pagamentos com cartão de crédito, além de coisas mais simples, como acessar sua conta de . Todavia, existem outros riscos nestas transações que podem nos causar danos, porém não é de interesse deste trabalho estudá-las. Pretende-se, através deste trabalho de conclusão de curso, detalhar todos os atributos e qualidades dos números primos, primos de mersenne e perfeitos; avaliar os resultados já confirmados, prever o tempo para obtenção de novos resultados e

16 16 eventualmente apresentar um algoritmo capaz de gerar números com estas características. Para tanto, será feito um detalhamento da arquitetura computacional para as quatro operações básicas e o seu respectivo custo computacional, além da estrutura e funcionamento da classe BigInteger da linguagem de programação Java e seus métodos, os quais serão empregados para a resolução dos testes com números grandes, com quantidade de algarismos acima das aceitas por atribuição direta a variáveis comuns, como por exemplo: 2 n onde n = Ainda será detalhado o uso de números primos para a criptografia de dados relacionando com os resultados obtidos nesta pesquisa, a fim de obter uma dimensão da complexidade empregada na encriptação. E no mesmo contexto apresentar-se-á a prova da infinitude dos números primos, o que significa que, caso não se encontre um algoritmo capaz de fatorar um número grande utilizado na encriptação de dados, sempre haverá disponibilidade de números primos para serem utilizados na Criptografia. Como contribuição acadêmica deste trabalho, serão levados em consideração possíveis derivações ou classes especiais de números que apresentem uma característica em comum, as quais podem ser fortes candidatas a números primos ou até podem ser descartadas dos testes por apresentarem características de número composto. Com isso se torna possível uma seleção de números restrita, resultando em algoritmos mais rápidos, inclusive com possibilidade de adaptação em algoritmos de teste de primalidade já existentes. Por fim serão destacados possíveis números primos com uma grande quantidade de algarismos para fazer os testes de primalidade, com o algoritmo mais eficiente encontrado ou construído durante o trabalho de pesquisa e implementação. Portanto, considerando a intensidade das pesquisas que se faz em países europeus, asiáticos e também nos Estados Unidos e uma quase inexistência de interessados no estudo de algo tão singular no Brasil, mostrou-se como uma possibilidade de desenvolver uma linha de pensamento que poderá ser seguida. O trabalho está basicamente dividido em cinco grandes capítulos, os quais são amplamente descritos e com subtítulos intuitivos para melhor compreensão da organização do mesmo.

17 17 No primeiro capítulo temos a introdução como uma descrição geral do trabalho feito, suas principais características, com os temas abordados e algumas constatações interessantes para aguçar o interesse pelo trabalho. No segundo capítulo será apresentada uma revisão bibliográfica sobre a complexidade computacional de algoritmos, as suas definições, medidas e notações de complexidade, alem da especificação de melhor caso, pior caso e caso médio. No terceiro capítulo teremos toda contextualização da teoria dos números. Serão abordados os números perfeitos como suas características históricas e das novas pesquisas. Os números primos com as suas derivações e aplicações. Serão apresentados alguns algoritmos para testes de primalidade, além da prova da sua infinitude dos números primos. No quarto capítulo será feita uma análise dos algoritmos utilizados e apresentados no trabalho e feita uma avaliação de cada um deles, para apresentar possíveis melhorias através da introdução de alguns cálculos. No quinto e último Capítulo serão feitas as constatações finais, com a apresentação de possíveis linhas de pesquisa que possam ser seguidas em trabalhos futuros.

18 18 2. COMPLEXIDADE COMPUTACIONAL DE ALGORITMOS Um algoritmo é um procedimento a ser realizado para se obter uma saída satisfatória para qualquer entrada, desde que haja tempo e memória suficientes para tal (TOSCANI E VELOSO, 2002). Cada procedimento é composto de uma regra ou de um conjunto de regras que se comportam de maneira a proporcionar o resultado para o qual o algoritmo foi proposto. Estes conceitos teóricos sobre algoritmos não são obrigatoriamente aceitáveis na prática, já que a solução de um problema pode ser simples do ponto de vista conceitual, e na prática a solução pode não ser alcançável em tempo hábil, devido ao tamanho da entrada. Um algoritmo para o cálculo do determinante de uma matriz, por exemplo, pode variar muito dependendo do método, ou seja, do conjunto de regras utilizadas para obter o resultado. Se utilizado o método de Cramer, podem-se levar séculos para calcular o determinante de uma matriz 20 x 20 (20 linhas e 20 colunas). Já com o método de Gauss o cálculo levará menos de um segundo (TOSCANI E VELOSO, 2002). n Método de Cramer Método de Gauss 2 22 µs 50 µs µs 159 µs µs 353 µs 5 2,35 ms 666 µs 10 1,19 min. 4,95 ms séculos 38,63 ms séculos s Quadro 1: Tamanho do Problema x Tempo de Execução Fonte: TOSCANI E VELOSO, 2002; pg. 2. Os números primos também são exemplo de problemas de difícil solução. Com a inexistência de padrão entre os números primos, os mesmos não podem ser representados por equações. Assim o teste de primalidade de números extremamente

19 19 grandes é feito em tempo polinomial, pelo algoritmo AKS, porém na prática, como a constante, ou seja, o próprio número a ser testado é muito grande, este teste pode levar muitos anos para testar apenas um número dependendo do tamanho do mesmo. Existem vários algoritmos para o teste de primalidade e cada um deles usa um conjunto diferente de regras para chegar ao resultado. Com isto têm-se diferentes desempenhos destes algoritmos, com dispêndio de tempo e memória distintos, alguns com soluções exatas, outros com probabilidades. Constata-se ainda que o mesmo resultado pode ser alcançado com um conjunto de regras diferentes. Pode-se também utilizar o mesmo algoritmo, ou seja, o mesmo conjunto de regras, porém com a implementação diferente de operações. Isto pode proporcionar uma melhora significativa no tempo de execução do algoritmo. Como exemplo disto tem-se o modulo de uma divisão, teste fundamental na primalidade dos números. O módulo é o resto r de uma divisão de um número n por um divisor d. Quando o r for zero, n é um número composto. EXEMPLO: módulo 2047 é igual a 0: n = = d = 2047 r = MEDIDAS DE COMPLEXIDADE A quantidade de trabalho que um algoritmo requer para apresentar uma solução satisfatória não pode ser representada na forma de um número, ou uma constante, isto por que o número de operações básicas efetuadas pelo algoritmo depende do tamanho da entrada.

20 20 E mesmo que o tamanho da entrada, ou seja, a quantidade de valores colocados como entrada do algoritmo seja igual, o trabalho do algoritmo pode ser maior ou menor, dependendo de outros aspectos. Por exemplo, para dizer se um número n é primo ou não, podemos ter um custo computacional muito diferente, dependendo do valor de n. Esta variação de complexidade, conforme o tamanho da entrada, pode ser denominada complexidade no pior caso. Já se considerarmos uma solução possível com menos custo, levando em conta a probabilidade de ocorrência de cada entrada de um mesmo valor, a complexidade pode ser definida como complexidade esperada ou média (TOSCANI E VELOSO, 2002). Considerando um algoritmo de força bruta, sem o uso de nenhuma técnica ou função matemática específica para cálculo de números primos e que para um determinado número ser primo ele não pode ter nenhum divisor além de 1 e dele próprio, a complexidade de confirmação de um número como primo sempre é a complexidade do prior caso. Já um número composto vai apresentar características de Melhor Caso e Caso Médio, já que a fatoração do número n se dá antes de serem esgotadas todas as possibilidades. Para termos uma noção mais clara da complexidade computacional para a definição da primalidade de um número primo podemos considerar para cada caso uma entrada n específica e um algoritmo de força bruta que testa todas as possibilidades. Levando em consideração que, caso um número seja composto, ele terá pelo menos um divisor menor que a sua raiz quadrada. Assim, consideram-se esgotadas todas as possibilidades de decomposição de um número, quando testamos todos os valores de 2 até a sua raiz quadrada.

21 21 Para [i de 2 até n ] faça: Se (n mod i = 0) então: Retorna COMPOSTO Senão i = i + 1; retorna PRIMO; Figura 1: Pseudocódigo para teste de primalidade; Para efeitos de teste foram utilizados os números 83, 84 e 85 escolhidos por apresentarem as características desejadas para a demonstração dos três casos de complexidade. a) Melhor Caso Para uma entrada n=84; Neste caso o algoritmo somente será executado uma vez, sendo que na divisão de n por 2 já será constatado que se trata de um número composto. Esta é considerada a complexidade de menor custo para o algoritmo em questão; n Operação Operando Resto 84 mod. 2 0 Quadro 2: Complexidade Melhor Caso para teste de primalidade; b) Caso Médio Para uma entrada n=85; Neste caso o algoritmo será executado mais de uma vez, porém menos de 9 vezes (9 é a parte inteira da raiz quadrada de 85). n Operação Operando Resto 85 mod mod mod. 4 1

22 22 85 mod. 5 0 Quadro 3: Complexidade Caso Médio para teste de primalidade Percebe-se que na divisão de n por 5 já será constatado que se trata de um número composto. Esta é considerada a complexidade de médio custo para o algoritmo em questão; c) Pior Caso Para uma entrada n=83; Neste caso o algoritmo será executado 9 vezes (9 é a parte inteira da raiz quadrada de 85), ou seja, o máximo de opções a serem testadas, mesmo levando em consideração um n menor que na opção anterior. n Operação Operando Resto 83 mod mod mod mod mod mod mod mod. 9 2 Quadro 4: Complexidade Pior Médio para teste de primalidade Percebe-se que na divisão de n por todos os valores possíveis, não é constatada nenhuma divisão exata, o que indica que o n em questão é um número primo e assim sendo, a execução do teste de primalidade é considerado de complexidade de pior caso para o algoritmo em questão;

23 NOTAÇÕES DE COMPLEXIDADE Para definir o custo computacional de um determinado algoritmo são utilizadas ordens assintóticas, as quais são definidas pelo crescimento da complexidade conforme as entradas. O comportamento assintótico de um algoritmo é muito utilizado pelo fato de tornar possível uma análise da complexidade do mesmo para uma entrada relativamente grande sem ter que executá-lo. Existem várias comparações de complexidade assintótica, mas as mais utilizadas são as definidas pelas notações O (ó grande), Ω (Ômega) e Ө (Theta) (TOSCANI E VELOSO, 2002). Nos cálculos de complexidade, muitas vezes utiliza-se da simplificação, ao passo que avaliar toda a informação de uma função pode ser muito difícil. Assim, no contexto deste trabalho será utilizada a complexidade log n Notação O Uma notação O define que o crescimento do custo de uma determinada função é superior à outra função. Considerando as seguintes funções: f(n) = 3 n ; g(n) = n 2 ; f(n) g(n) Figura 2: Crescimento assintótico O f(n);

24 24 Neste caso a função f(n) cresce mais rapidamente que a função g(n), por isso pode afirmar que: g(n) O f(n) Notação Ω Uma notação Ω define que o crescimento do custo de uma determinada função é inferior à outra função. Considerando as seguintes funções: f(n) = 5 n ; g(n) = 7*n 5 ; f(n) g(n) Figura 3: Crescimento assintótico Ω f(n). Neste caso a função g(n) cresce mais rapidamente que a função f(n), por isso pode afirmar que: f(n) Ω g(n) Notação Ө Uma notação Ө define que o crescimento do custo de uma determinada função é igual à outra função. Considerando as seguintes funções: f(n) = 6*n+4; g(n) = 2*n+2;

25 f(n) g(n) Figura 4: Crescimento assintótico Ө f(n). Neste caso a função g(n) cresce com a mesma rapidez que a função f(n), por isso pode afirmar que: f(n) Ө g(n).

26 26 3. TEORIA DOS NÚMEROS Há evidências, em registros dos antigos egípcios, de que eles tiveram conhecimentos sobre número primos. O Papiro egípcio de Ahmes ou de Rhind, de cerca de 1650 A.C, era um papiro onde um escriba de nome Ahmes ensinava as soluções de 85 problemas de aritmética e geometria. Mais tarde, no século XIX, este papiro foi encontrado pelo egiptólogo inglês Rhind. Curiosamente, neste papiro, os números primos foram escritos de forma diferente dos números compostos (IFRAH, 1997). Percebe-se que a história dos números é muito antiga e está contada no livro A História Universal dos Algarismos do Autor Georges Ifrah, e vinha sofrendo alterações e melhorias ao longo dos séculos. A evolução ocorreu lentamente e em épocas permanecia estagnada até o surgimento de uma nova linha de pensamento que trazia novas ideias e teorias. Por volta de 300 A.C. na Grécia Antiga surgiram os primeiros conceitos de números primos. Euclides afirma na definição 11 do Livro VII dos Elementos: Um número primo é aquele que é medido apenas pela unidade (EUCLIDES, 1944). Na definição 13 do Livro dos Elementos, Euclides define também os números compostos. Um número composto é aquele que é medido por algum número. Coutinho (2004) traduz estes conceitos para os dias de hoje, e define a expressão medido por como divisível por um numero menor do que ele próprio. Assim podemos definir como primos os números que não são divisíveis por nenhum número menor que ele, exceto o NÚMEROS PERFEITOS Os números perfeitos foram caracterizados 300 A.C. por Euclides, que definiu um número como perfeito quando a soma de todos os seus divisores é igual ao próprio número. Por volta do ano 600 o PE. Frances Marin Mersenne juntamente com Pierre de Fermat definiu a classe dos números de mersenne, que são da forma 2 n -1.

27 27 Exemplo 1: Número 6: Divisores: = 6; Se aplicarmos a fórmula de mersenne teremos: FM = 2² - 1 = 3; o 2 e o 3 são números primos, portanto: (2² - 1) * (2² - 1 ) = 3 * 2 = 6. Assim 6 é um número perfeito; Exemplo 2: Número 28: Divisores: = 28; Se aplicarmos a fórmula de mersenne teremos: FM = 2³ - 1 = 7; o 3 e o 7 são números primos, portanto: ( 2³ - 1 ) * ( 2³ - 1 ) = 7 * 4 = 28. Assim 28 é um número perfeito; Sendo n um número primo e o resultado da equação também for um número primo, podemos gerar um número perfeito, através da multiplicação de ambos. Portanto temos uma relação direta dos números de mersenne com os números perfeitos, que também é objeto de pesquisa deste trabalho. Em artigo publicado em 2010, os pesquisadores chineses: Sibao Zhang, Xiaocheng Ma e Lihang Zhou desenvolveram um estudo sobre a distribuição dos números primos de mersenne, apresentando uma tabela de probabilidade de incidência em um determinado intervalo de números. Nesta tabela, o n é um número sequencial que define a quantidade de números primos de mersenne. Quando o log 2 (n) é igual a n/2, pode-se definir a quantidade de números primos de mersenne para o intervalo de 1 até n, como sendo a diferença entre o n atual e todos os n onde obtivemos a relação de igualdade entre o log 2 (n) e n/2.

28 28 EXEMPLO 1: Para n=16, temos: Q = (log 2 (n)) 1 = (log 2 (16)) 1; Q = 4 1 = 3; R(n) = 2 2Q = = 2 8 = 256; Log 2 R(n) é igual a n/2 quando: n = 2, 4, 8, 16 (4 valores); número de primos de mersenne = (n quantidade de valores); número de primos de mersenne = 16 4 = 12; Portanto, de 1 até n=16 (para 2 R(n) 1 = ) temos 12 números primos de mersenne. EXEMPLO 2: Para n=32, temos: Q = (log 2 (n)) 1 = (log 2 (32)) 1; Q = 5 1 = 4; R(n) = 2 2Q = = 2 16 = 65536; Log 2 R(n) é igual a n/2 quando: n = 2, 4, 8, 16, 32 (5 valores); número de primos de mersenne = (n quantidade de valores); número de primos de mersenne = 32 5 = 27; Portanto, de 1 até n=32 (para 2 R(n) 1 = ) temos 27 números primos de mersenne. O quadro abaixo apresenta a lista de todos os números primos de mersenne em seus respectivos intervalos, baseados nesta conjectura.

29 29 n R(n) P, Q log2r(n) n/2 n R(n) P, Q log2r(n) n/2 1 2 P(1) P(23) Q(0) P(24) P(2) P(25) Q(1) P(26) P(3) P(27) P(4) Q(4) P(5) P(28) Q(2) P(29) P(6) P(30) P(7) P(31) P(8) P(32) P(9) P(33) P(10) P(34) P(11) P(35) P(12) P(36) Q(3) P(37) P(13) P(38) P(14) P(39) P(15) P(40) P(16) P(41) P(17) P(??) P(18) P(??) P(19) P(??) P(20) P(??) P(21) P(??) P(22) P(??) (?) Seqüência ainda não provada. Quadro 5: Probabilidade de incidência de números perfeitos. Fonte: (ZHANG, MA, ZHOU, 2010).

30 30 Observando o quadro, fica evidente a infinitude dos números primos de mersenne e por consequência os números perfeitos. Porém, considerando que a incidência de números primos de mersenne apresentada no por Sibao Zhang, Xiaocheng Ma e Lihang Zhou é uma conjectura, esta infinitude também não pode ser provada. No entanto, pela conjectura teríamos: Para n=64: Q = (log 2 (n)) 1 = (log 2 (64)) 1; Q = 6 1 = 5; R(n) = 2 2Q = = 2 32 = ; Log 2 R(n) é igual a n/2 quando: n = 2, 4, 8, 16, 32, 64 (6 valores); número de primos de mersenne = (n quantidade de valores); número de primos de mersenne = 64 6 = 58; Portanto, de 1 até n=64 (para 2 R(n) 1 = ) teríamos 58 números primos de mersenne. Atualmente são conhecidos 47 números primos de mersenne e números perfeitos que estão representados no quadro abaixo.

31 31 Ordem Expoente Díg. Primo Mersenne Díg. Número Perfeito Ano ?? ?? ?? ?? ?? ?? (?) Seqüência ainda não provada. Quadro 6: Lista de números perfeitos (GIMPS, 2012)

32 32 O maior número primo encontrado até hoje tem mais de 12 milhões de dígitos e torna-se obvio que não seria possível armazenar este número em uma variável comum. O fato do maior primo ser um número de mersenne, está diretamente relacionada com o algoritmo de teste de primalidade utilizado para estes números. O teste de primalidade de Lucas-Lehmer é de longe o mais eficiente e com menor custo computacional, mas apenas se aplica aos números de mersenne. Este número especial foi encontrado em 2009 por uma rede voluntária através de um sistema de computação distribuída denominada: Great Internet Mersenne Prime Search (GIMPS). Conforme publicou em seu site a Electronic Frontier Foundation, o grupo recebeu o prêmio de $ ,00 o qual foi distribuído entre vários colaboradores. No Site do GIMPS é possível se cadastrar e participar da pesquisa. Cada membro da rede recebe números para teste de primalidade. Os números são gerados a partir da fórmula de mersenne (2 n -1) e caso sejam primos são também geradores de números perfeitos. No mesmo endereço eletrônico o GIMPS também confirma a inexistência de qualquer número primo de mersenne diferente dos que já estão confirmados menores que Este número primo de mersenne havia sido descoberto em 2004 e em dezembro de 2011 foi confirmado como 41º número primo de mersenne; A garantia se dá pelo fato do grupo ter testado duas vezes cada número de mersenne menor. Portanto, o garimpo continua para valores acima de Ainda não é conhecido nenhum número perfeito impar e conjectura-se que eles não existam, porém a prova não é trivial NÚMEROS PRIMOS Uma das definições dos números primos é que todo número inteiro maior que um, e que não seja um número primo, pode ser escrito como um produto de números primos. Desta forma pode-se afirmar que todo inteiro positivo não primo pode ser escrito como um produto de números primos (SAUTOY, 2007).

33 33 Inteiro positivo Fatores 2 Primo 3 Primo 4 2 * 2 5 Primo 6 2 * 3 7 Primo 8 2 * 2 * * * 5 11 Primo 12 2 * 2 * 3 13 Primo 14 2 * * 5 Quadro 7: fatores primos de números inteiros positivos É necessário definir um primo como sendo um produto de fator único e assumir que o número 1 é um produto vazio ou sem fator. Cada número inteiro positivo tem uma única representação como produto de números primos e pode também ser identificado unicamente através de seus fatores, ou seja, um inteiro positivo pode ser decomposto de uma única maneira em fatores primos mesmo sem considerarmos a ordem dos fatores. Assim pode-se afirmar que não existem dois números inteiros positivos distintos cujas decomposições em primos sejam equivalentes. Estas afirmações foram provadas pelos antigos gregos Aplicações, Pesquisas e Premiações. Já na metade do século XIX, foi feito um grande progresso nas pesquisas relacionadas a teoria dos números. Bernhard Riemann passou a abordar o problema de uma forma completamente nova. Utilizando uma nova perspectiva, começou a compreender parte do padrão responsável pelo caos dos primos. Havia uma harmonia sutil e inesperada

34 34 escondida sob o ruído externo dos primos. Apesar deste grande salto adiante, a nova música ainda ocultava muitos de seus segredos. Riemann foi audacioso e fez uma previsão ousada sobre a melodia misteriosa que havia descoberto. Essa previsão ficou conhecida como a hipótese de Riemann. Quem conseguir provar que a intuição de Riemann sobre a natureza dessa música estava correta terá explicado por que os primos nos transmitem uma impressão tão convincente de aleatoriedade (SAUTOY, 1965). Riemann desenvolveu sua ideia original após descobrir um espelho matemático através do qual era possível observar os primos. Hoje, o problema proposto em 1859 por Bernhard Riemann faz parte de um seleto grupo de problemas não resolvidos, e para quem solucionar a apresentar a prova da Hipótese de Riemann será pago um prêmio de um milhão de Dólares oferecido em 2000 por Clay Mathematics Institute (CLAY MATHEMATICS INSTITUTE, 2012). Outras pesquisas e as novas descobertas foram feitas com o passar dos anos e com isso, os números primos vieram a ter uma relevante importância para a Ciência da Computação. Alguns algoritmos e estruturas de dados se baseiam nos números primos como é o caso das tabelas Hash (ROBERT, 1990). A partir de 1970, devido ao conceito de criptografia de chave-pública, passaram a formar a base dos primeiros algoritmos de criptografia, como exemplo, podemos citar o algoritmo cryptosystem da RSA (SINGH, 2001). Os números primos passaram a ser tão interessantes que começaram a ser oferecidas premiações para que fizesse alguma nova descoberta. A Eletronic Frontier Foundation (EFF) oferecia US$100,000 para quem encontrasse um primo de 10 milhões de dígitos. Este número primo foi descoberto em 2009 por uma rede voluntária através de um sistema de computação distribuída denominada: Great Internet Mersenne Prime Search, já citada anteriormente (GIMPS, 2012). Atualmente são oferecidos os prêmios de US$150,000 para um número primo com mais de 100 milhões de dígitos e US$250,000 para um primo com mais de um bilhão de dígitos. (EFF, 2012) A RSA Factoring Challenge oferecia até US$200,000 para quem encontrasse os fatores primos de um semi-primo ou pseudo-primo de até 2048 bits. Esse desafio foi encerrado em 2007, e os números semi-primos fatorados podem ser encontrados na

35 35 página da RSA Factoring Challenge (RSA Laboratories, 2012). Mesmo assim, uma equipe de pesquisa liderada por T. Kleinjung, obteve exito na fatoração do desafio número RSA-768 (768 bits). Enquanto o Desafio Factoring RSA não está mais ativo, o factoring da RSA-768 representa um marco importante para a comunidade. Os fatores foram encontrados em 12 de dezembro de 2009, e foram apresentadaos no artigo Factorization of a 768-bit RSA modulus, de 18 de fevereiro de 2010 (KLEINJUNG, 2010). Fator 1 Fator 2 Número Semi-Primo ; (116 dígitos) ; (116 dígitos) ; (232 dígitos). Quadro 8: Semi-primo e fatores do desafio RSA Laboratories. Fonte: (KLEINJUNG, 2010) Infinitude dos Números Primos Euclides ofereceu uma demonstração em sua obra Os Elementos (Livro IX, Proposição 20) que prova por absurdo que existem infinitos números primos. Esta prova é baseada em alguns conceitos matemáticos. Um desses conceitos e a primalidade entre dois números, ou seja, os coprimos.

36 36 PROVA 1: Coprimos são números que porventura, mesmo sendo compostos, não tenham nenhum divisor em comum (ALENCAR FILHO, 1981). Tendo por exemplo os números 8 e 9: Divisores do número 8: 1, 2, 4, 8; Divisores do número 9: 1, 3, 9; Observa-se no exemplo que MDC de 8 e 9, é o número 1, e portanto os dois números são coprimos. Isto acontece com todos os números sequenciais, ou seja, n e n+1. PROVA 2: Outra prova matemática utilizada para comprovar a primalidade dos números primos é a decomposição de todo e qualquer número por números primos menores, ou seja, qualquer que seja o número ele é composto pelo produto de números primos menores, a não ser que ele próprio seja um número primo. Assim, temos argumentos suficientes para apresentar a prova da infinitude: Suponhamos que os números primos seja finitos e que estão representados na lista L = {2, 3, 5, 7} Multiplicando todos os números da lista, temos: 2*3*5*7 = 210; Pela PROVA 1, sabemos que 211 não tem nenhum divisor em comum com o 210. E pela PROVA 2, sabemos que ele deve ser divisível por qualquer número, caso não seja primo. Assim, conclui-se que, se 211 não é um valor primo, tem-se pelo menos um outro primo além dos que estão na suposta lista finita L = {2, 3, 5, 7}, que dividiria o número 211. Caso não haja pelo menos um divisor primo para o número 211, ele próprio é um número primo. Assim, para qualquer lista supostamente finita de números primos, tem-se pelo menos um outro número primo, e portanto, conclui-se que os números primos são infinitos. No quadro podemos observar alguns exemplos desta prova:

37 37 Lista supostamente finita de números Primos Produto dos Fatores Coprimo do produto Fatores do coprimo = * = * 3 * = * 3 * 5 * = * 3 * 5 * 7 * = * 3 * 5 * 7 * 11 * = , * 3 * 5 * 7 * 11 * 13 * = , 97, 277 Quadro 9: Exemplos de prova da infinitude dos números primos. Provada a infinitude dos números primos, tem-se a garantida à existência de diferentes primos para a utilização na criptografia de dados, abordada na próxima seção Criptografia RSA Encontrar números primos com 100 algarismos parece ser algo inteiramente inútil, embora a maioria das pessoas reconheça que a matemática está envolvida no desenvolvimento de tecnologia de maneira geral, poucos esperam que os números primos possam provocar um grande efeito em suas vidas. Entretanto, os números primos passaram recentemente ao primeiro plano do mundo das pesquisas. Não estão mais confinados apenas aos matemáticos e a alguns aventureiros. Nos anos 1970, os cientistas: Ron Rivest, Adi Shamir e Leonard Adleman revolucionaram a busca por números primos, que deixou de ser uma brincadeira para se tornar uma importante ferramenta de negócios. Explorando uma descoberta feita por Pierre de Fermat no século XVII, os três descobriram um modo de usar os primos para proteger os dados trafegados pela Web através da criptografia denominada RSA, em homenagem aos três autores. Quando a idéia foi lançada, nos anos 1970, ninguém podia imaginar as dimensões que as transações pela WEB alcançariam. Porém, sem a força dos números primos, esse tipo de comércio jamais poderia existir hoje em dia. Sempre que fazemos compras pela internet, nossos computadores utilizam um sistema de segurança que

38 38 depende da existência de números primos com inúmeras casas decimais (SINGH, 2001). O Livro dos Códigos, pag. 419 (SINGH, 2001), trás um exemplo do funcionamento da criptografia RSA para a transmissão de uma mensagem, no qual podemos observar a cifragem e a decifragem RSA passo a passo: PASSO 1: Escolhe-se dois números primos gigantes p e q. Para o exemplo são escolhidos os números p = 17, e q = 11. PASSO 2: Multiplica-se p x q para encontrar o N. N = 11 x 17 = 187. qq = (p-1)x(q-1) Escolhe-se um primo relativo à qq que pode ser e = 7; Primo relativo à qq é apenas aquele que não possui divisor em comum, ou seja, sendo qq = 160 e possuindo vários divisores (160 possui 8 divisores: 2, 4, 8, 10, 16, 20, 40 e 80) qualquer número que não tenha nenhum destes divisores serve. Na prática se e for também um número primo, ou seja, não possuir divisor algum, ele será com certeza um primo relativo à qq. Assim qualquer número primo serve como e. Atualmente o sistema de criptografia RSA fixa este número para todas as chaves. PASSO 3: Divulgam-se os números e e N; Estes números são a chave pública para a encriptação dos dados e devem estar disponíveis para quem quiser cifrar uma mensagem a ser enviada. PASSO 4: A mensagem a ser enviada deve ser convertida em um número M. O processo de conversão passa pela transformação da mensagem em dígitos binários e depois em decimais, produzindo então o texto cifrado C. C = M e (mod. N); PASSO 5: Para enviar simplesmente a letra X como mensagem. No ASCII isto é representado por , que equivale a 88 em decimais. Assim, M = 88. PASSO 6: Para cifrar a mensagem, utiliza-se o N = 187, e = 7 e M = 88. Utilizando a fórmula para cifrar, temos: C = 88 7 (mod. 187). PASSO 7: Efetuando o cálculo da fórmula temos: C = 88 7 = = 11 (mod. 187). Envia-se, portanto a mensagem 11.

39 39 PASSO 8: Para decifrar a mensagem que foi cifrada com o algoritmo de mão única fica praticamente impossível, se levarmos em consideração que são utilizados números primos gigantes e que os desconhecemos. Porém quem gerou a chave pública, possui os fatores do número N, e pode decifrar a mensagem enviada através da chave privada. PASSO 9: A chave privada é calculada a partir da seguinte fórmula. e x d = 1 (mod. qq); 7 x d = 1(mod. 16 x 10); 7 x d = 1(mod. 160); d = 23; Neste passo percebe-se que é necessário sabermos quais foram os números primos utilizados para a geração da chave pública. Assim, se utilizarmos outros valores não chegamos ao resultado esperado, ou seja, não se obtêm a mensagem correta que foi enviada. PASSO 10: Apenas neste momento conseguimos decifrar a mensagem. Com todos os valores obtidos, aplicamos os mesmos na seguinte fórmula: M = c d (mod 187); M = (mod 187); M = (mod. 187); M = 88 = X na tabela ASCII. Com este exemplo percebe-se que a função utilizada para encriptar os dados é de mão única, podendo apenas ser revertida por alguém que tenha acesso aos dois números primos que foram utilizados. A função permite, porém, que qualquer um cifre mensagens para qualquer pessoa que divulgue a chave pública, mas apenas tem acesso á mensagem correta, a pessoa que conhece a chave privada.

40 40 Figura 5: Exemplo de Criptografia RSA (PLACE, 2012) A segurança da criptografia RSA baseia-se na grande dificuldade de fatoração desse produto dos dois números primos gigantes. Mesmo tendo esse produto (que faz parte da chave pública divulgada), a segurança ainda é garantida justamente pela complexidade desta fatoração. Para quantificar esta complexidade, podemos considerar que se um algoritmo de busca de chave através da força bruta (busca exaustiva da chave). Um computador executando um milhão de instruções por segundo durante um ano, levaria 30 mil anos para efetuar a fatoração necessária no pior caso, para uma chave de 512 bits. Uma chave assimétrica de 768 bits demandaria 200 milhões de anos; uma chave assimétrica de bits demandaria 300 bilhões; e finalmente, uma chave de bits exigiria 300 quinqüilhões de anos para ser quebrada (SINGH, 2001) DERIVAÇÕES DE NÚMEROS PRIMOS Como já foi citado na descrição geral das características e na expressão de algumas particularidades dos números primos, obtêm-se através de inúmeras derivações, diferentes classes destes números, cada qual com características especiais.

41 41 Todos os números têm como característica fundamental para ter a condição de número primo, a divisibilidade apenas pela unidade e por ele próprio. Porém, a partir daí vê-se uma enorme gama de particularidades de cada classe, o que facilmente poderia levar alguém a concluir pela total falta de padrão e relação entre os mesmos. Por isso inúmeros pesquisadores definiram diferentes algoritmos que podem ser aplicados aos números primos, dependendo do resultado que se deseja obter. Neste trabalho serão abordados apenas as principais derivações dos números primos, com suas características, aplicações e algoritmos utilizados na sua determinação, além da complexidade computacional de cada algoritmo Força Bruta Um algoritmo de teste de primalidade por força bruta testa todas as possibilidades de divisibilidade de um número até a sua raiz quadrada sem levar em consideração nenhum outro método. Neste trabalho será apresentado um algoritmo de força bruta desconsiderandose apenas os números pares, seguindo o princípio de que o único número primo par é o número 2. Um pseudo código do algoritmo de força bruta pode ser observado a seguir: Para i de 3 até n faça: Se (n mod. i = 0) então: Retorna composto; Senão: n=n+2; Retorna primo; Para os testes de desempenho e comparação com outros algoritmos foi utilizado o seguinte código JAVA:

42 42 Figura 6: Algoritmo Força Bruta em JAVA O teste de primalidade por força bruta e um método determinístico, porém sua complexidade é O (2 n ), considerando que a complexidade de algoritmos é calculada com base no tamanho da entrada, que neste caso, é a quantidade de dígitos da representação binária do número em questão, e não o próprio número (SAUTOY, 2007). Para o teste de primalidade pelo método de força bruta temos um maior custo computacional se comparado com qualquer outro algoritmo, e o tempo de execução para um determinado intervalo pode ser observado no quadro abaixo. Quantidade de números Tempo de execução Intervalo primos no intervalo em Milissegundos 0 a a

43 43 0 a a a a a a a a Quadro 10: Tempo de execução do algoritmo de força bruta O Crivo de Erastóstenes Por volta de 200 A.C. o grego Erastóstenes criou o Crivo de Erastóstenes, o qual consiste basicamente em pegar uma lista de números e pelo método de exclusão retirar os números compostos, até que sobrem somente os números primos. Este algoritmo foi o primeiro algoritmo a ser aplicado para definir os números primos em um determinado intervalo. Dispõe-se os números naturais de 1 a n, onde n é o limite superior até o qual se deseja obter os números primos, procedendo-se da seguinte maneira: - Inicialmente, risca-se o 1, que não é primo. - Em seguida, risca-se todos os múltiplos de 2, exceto o 2 que é primo; - Depois de riscar todos os múltiplos do primeiro primo, passe para o próximo primo, que é o número 3 e risque todos os múltiplos de 3, menos ele próprio.

44 44 Figura 7: Exemplo do Crivo de Erastóstenes até o número 101. Percebe-se que alguns números são marcados mais de uma vez, pois são múltiplos de mais um primo, como o número 15, múltiplo de 3 e 5. Por isso, é importante saber em que primo p podemos parar, para evitar operações desnecessárias. Para encontrar esse p ideal usa-se o conceito de que, se um divisor d divide um número n, caso ele seja maior que a raiz quadrada de n, logo o seu quociente é menor que a raiz quadrada de n. Assim precisa-se apenas utilizar os números primos menores que a raiz quadrada de n e definir os seus múltiplos. Através desta expressão é possível observar que para n = 50, por exemplo, é possível parar no primo 7, pois 50 7, ou seja, para determinar todos os números primos menores que 50 basta riscar os múltiplos de 2, 3, 5 e 7. Um exemplo de código JAVA para o Crivo de Erastóstenes está representado a seguir:

45 45 Figura 8: Algoritmo do crivo de Erastóstenes; Percebe-se pontos importantes no algoritmo do crivo de Erastóstenes, os quais serão destacados a seguir. O parâmetro recebido pelo método limite indica o limite superior, até o qual serão definidos todos os números primos. No primeiro laço for o vetor criado com tamanho igual ao limite superior é preenchido com os valores sequenciais de 1 ao limite. No segundo laço for o valor da posição atual do vetor é comparado com o seu valor inicial, e caso o valor permaneça inalterado, significa que é um número primo. Neste momento ele é impresso na console. E ainda dentro da condição temos outra condição a qual limita o trabalho de exclusão dos múltiplos até a raiz quadrada do limite. E dentro desta condição temos o terceiro laço for, que zera todos os múltiplos do número primo recém-encontrado, tornando-os todos números compostos. O crivo de Erastóstenes é um algoritmo bem interessante para intervalos de números, porém não é indicado para teste de primalidade de um número específico, com

46 46 centenas de dígitos, por exemplo, pois a Complexidade de tempo cresce exponencialmente com o número de dígitos. Portanto o Crivo de Erastóstenes tem complexidade exponencial O (2 n log n), sendo n o número a ser testado. Abaixo, pode-se observar o tempo de execução com determinados intervalos de números, utilizando o algoritmo proposto neste trabalho. Intervalo Quantidade de números Tempo de execução Probabilidade de primos no intervalo em Milissegundos ocorrência 0 a , a , a , a , a , a , a , a , a , a ,0665 Quadro 11: Analise do crivo de Erastóstenes Com o Crivo de Erastóstenes fica evidente que, na medida em que os números vão crescendo, a chance de ser um número primo diminui, o que pode ser observado na última coluna do quadro acima Teste de Lucas Lehmer O teste de Lucas-Lehmer é um teste de primalidade determinístico muito eficiente para determinar se um número é primo, porém aplica-se somente aos números primos de mersenne. Uma vez que é conhecido que os números de Mersenne só podem ser primos para subscritos primos, a atenção pode ser limitada a números de Mersenne da forma, em que é um primo ímpar (WOLFRAM MATH WORLD, 2012).

47 47 Um pseudo código deste algoritmo pode ser visto da seguinte forma (LEHMER, 1981): Teste_LucasLehmer(p): s := 4; PARA i de 3 até p s = s 2-2 mod. 2 p -1; SE (s = = 0) ENTAO: 2 p -1 = PRIMO; SENÃO 2 p -1 = COMPOSTO; Como exemplo prático e de fácil compreensão, consideramos p=7: Temos: 2 p 1 = = 127; Figura 9: Exemplo do teste de Lucas-Lehmer Percebe-se que temos p - 2 iterações, sendo que p (primo) é a potencia de dois. Com isso, para definir se é primo temos apenas 605 iterações, sendo que o número gerado por possui 183 dígitos: Figura 10: Número gerado com p=607:

48 48 Outro fator interessante deste algoritmo é que após cada iteração trabalha-se apenas com o resto da divisão e que possibilita a obtenção do resultado sem que tenhamos números ainda mais colossais. Figura 11: Algoritmo em Java do teste de Lucas-Lehmer Empregando o teste de Lucas-Lehmer implementado em Java para o teste de primalidade dos primeiros 20 números primos de mersenne, pode-se observar claramente o bom desempenho do mesmo, se comparado a algoritmos de força bruta, por exemplo.

49 49 Ordem Expoente Quantidade de Tempo de execução em dígitos Milissegundos (1,9 seg.) (9,7 seg.) (10,6 seg.) (29,8 seg.) (1 min. 9,6 seg.) (1 min. 19,1 seg.) Quadro 12: Análise do teste de Lucas-Lehmer Utilizando algumas otimizações como por exemplo a Transformada Rápida de Fourier (FFT), o custo deste algoritmo é de Õ = (p 2 log p) (MERSENNE PRIMES, 2012). Este baixo custo em comparação a outros algoritmos de teste de primalidade, juntamente às características dos números de Mersenne são os principais responsáveis pelo fato de que os maiores primos conhecidos atualmente são primos de Mersenne.

50 O Teorema de Fermat O pequeno Teorema de Fermat é um teorema relacionado aos números primos e tem sido utilizado por outros algoritmos de descoberta de primalidade como o Monte-Carlo e o AKS. Este teorema faz uma análise de relação entre um número primo p e um número qualquer a. O teorema consiste de forma resumida em verificar a congruência entre da seguinte equação: a p - a 0 (mod. p) ou 2 p 2 (mod. p). Um algoritmo em Java pode ser observado na figura abaixo: Figura 12: Algoritmo Java do Teorema de Fermat.

51 51 Caso a congruência seja satisfeita o número definido por p = primo1 é um provável primo, já que esta congruência também é satisfeita por números não primos, o que torna este algoritmo probabilístico. Mesmo assim ele é muito utilizado pela sua eficiência para números grandes. A probabilidade de erro do algoritmo, para um número aleatoriamente escolhido de 1024 bits é de apenas uma em 10-41, sendo um dos principais motivos para a adoção deste teste em vários programas é que juntamente ao bom nível de confiança nos seus resultados, este teste possui um tempo de execução polinomial de Õ (k.log 2 n) usando exponenciação modular (SINGH, 1998). Juntamente com outros testes o algoritmo é uma opção interessante Algoritmo AKS Em seu artigo PRIMES is in P, Manindra Agrawal, Neeraj Kayal e Nitin Saxena preocuparam a humanidade, supostamente pondo em risco todo e qualquer tipo de criptografia RSA utilizado na transmissão de dados seguros pela internet. Com o teste de primalidade de um número sendo executado em tempo polinomial, facilmente seriam quebradas as chaves de criptografia (AGRAVAL, KAYAL e SAXENA, 2000). Porém com um detalhamento melhor das funções que o algoritmo executa e através de um estudo mais aprofundado deste algoritmo, viu-se que na prática ele não é tão eficiente assim. Mesmo com o seu custo computacional polinomial o algoritmo trabalha com uma constante expressivamente grande, o que o torna lento na prática. A ideia do algoritmo pode ser apresentada de forma resumida em alguns passos conforme o artigo: - Para a verificação da primalidade de um número n: - Decidir se n é uma potência perfeita de um número natural, ou seja, ver se n tem raiz quadrada exata. Caso tenha então n é composto. - Encontrar um fator primo onde este fator primo compreende um intervalo onde certamente haverá um fator primo para n caso n seja composto; Calcular o máximo divisor comum de a e n, para a r, se for maior do que 1 então n é composto; Neste caso o a é incrementado para fatores primos até que seja igual ao intervalo definido no passo anterior. - Se n for menor ou igual a r, n é primo.

52 52 Por último o AKS verifica a congruência (x a) n (x n a) (mod. x r 1, n), para todo a que satisfaça a condição da estrutura de controle do laço de repetição, se existir a congruência, n é composto. Caso contrário n primo. Este algoritmo apresenta complexidade computacional Õ (log6 n), na sua primeira versão (AGRAVAL, KAYAL e SAXENA, 2000). Atualmente são encontradas outras versões com melhorias na implementação do algoritmo reduzindo a sua complexidade Primos de Sophie Germain Outra classe de números primos são os primos de Sophie Germain, que se tornaram conhecidos pelo fato de estar provado que o teorema de Fermat é aplicável para esta classe de números. Um número é caracterizado como primo de Sophie Germain quando p é um número primo e 2 * p + 1 também é primo (SOPHIE GERMAIN PRIMES: BOTH P AND 2P+1 ARE PRIME). Todos os números primos com exceção dos números primos 2, 3 e 5, são congruentes 1, 7, 11, 13, 17, 19, 23, 29 mod. 30, ou seja, qualquer número com resto diferente é divisível por 2 ou 3 ou 5, ou ainda por 2 destes ou até pelos 3. Fazendo uma analise das possibilidades: Resto 1 módulo 30: 31 * = 63 não é primo (divisível por 3); 61 * = 123 não é primo (divisível por 3); Resto 7 módulo 30: 37 * = 75 não é primo (divisível por 5); 67 * = 135 não é primo (divisível por 5); Resto 13 módulo 30: 43 * = 87 não é primo (divisível por 3); 73 * = 147 não é primo (divisível por 3); Resto 17 módulo 30: 47 * = 95 não é primo (divisível por 5); 107 * = 205 não é primo (divisível por 5);

53 53 Resto 19 módulo 30: 79 * = 159 não é primo (divisível por 3); 109 * = 219 não é primo (divisível por 3); Resto 11 módulo 30: 11 * = * = 83 Resto 23 módulo 30: 23 * = * = 107 Resto 29 módulo 30: 59 * = * = 179 Observando os exemplos acima podemos concluir que os únicos números capazes de gerar números primos de Sophie Germain são: n 11 (mod. 30) - (11, 41, 71, 101, 131,... n); n 23 (mod. 30) - (23, 53, 83, 113, 143,... n); n 29 (mod. 30) - (29, 59, 89, 119, 149,... n); Obviamente que nem todos os números com resto 11, 23 e 29 geram números primos de Sophie Germain, apenas a prova de que os outros restos NUNCA o farão. No quadro a seguir tem-se a representação dos números primos de Sophie Germain do intervalo de 1 até 10 4.

54 Quadro 13: Números primos de Sophie Germain ente 1 e Para definir um número como primo de Sophie Germain, precisa-se fazer o teste de primalidade de dois números. Neste trabalho foi utilizado o seguinte algoritmo em JAVA:

55 Figura 13: Algoritmo para o teste dos números primos de Sophie Germain 55

56 56 4. ANÁLISE E AVALIAÇÃO DE ALGORÍTMOS Existem inúmeros algoritmos para teste de primalidade de números em específico, ou para geração de uma lista de números primos em um determinado intervalo. Também existem cálculos aproximados da incidência de números primos. Porém, neste trabalho foram apresentados os cinco principais algoritmos, levando em consideração o contexto histórico e também a aplicabilidade: Crivo de Erastóstenes, Lucas-Lehmer, Teorema de Fermat, AKS e os primos de Sophie Germain. Serão apresentadas algumas constatações a partir das pesquisas e testes realizados durante todo período de estudos. Estas observações poderão porventura fazer parte dos algoritmos existentes, visando à melhora do desempenho dos mesmos JAVA E IDE NETBEANS Para o desenvolvimento deste trabalho, mas precisamente para a construção e codificação dos algoritmos, foi utilizado a linguagem de programação Java e o Ambiente de Desenvolvimento Integrado (IDE) NetBeans 7.2, desde a fase de desenvolvimento dos algoritmos geradores dos números primos e perfeitos, até os testes de primalidade e os algoritmos para a análise dos dados obtidos. A linguagem Java foi utilizada por possuir suporte a números muito grandes através da abstração BigInteger e por ser a linguagem utilizada pela universidade em seu currículo acadêmico. Na figura abaixo observamos o diagrama conceitual da linguagem JAVA, contendo o pacote java.math e todos os métodos e funções matemáticas necessárias para o desenvolvimento deste trabalho, inclusos na Classe BigInteger.

57 57 Figura 14: Diagrama Conceitual Java Fonte: Classe BigInteger Todas as operações da Classe BigIntegers recebem tratamento como primitivos de Java do tipo inteiros. BigInteger, portanto, fornece suporte a todos os operadores primitivos Java de número inteiro, e todos os métodos de java.lang.math. Além disso, BigInteger fornece operações de aritmética modular, testes de primalidade (probabilísticos), manipulação de bits, e algumas outras operações diversas. A semântica de operações aritméticas desta classe é exatamente igual a dos operadores inteiros Java aritméticas, como definido na especificação de linguagem Java. Por exemplo, uma divisão por zero gera uma ArithmeticException e divisão de um negativo por um positivo resulta um resto (ou zero) negativo. Os BigIntegers ocupam o espaço necessário para acomodar os resultados de uma operação. Semântica de operações lógicas bit a bit exatamente iguais aos dos operadores de Java bit a bit inteiros. Os operadores binários (e, ou, xor) implicitamente realizam a extensão de sinal no mais curto dos dois operandos antes de realizar a operação.

58 58 Realizar operações de comparação conforme comparações inteiras, análogas às realizadas por Java relacional e operadores de igualdade. Operações aritméticas modulares são fornecidos para calcular resíduos, executar exponenciação, e calcular inversos multiplicativos. Estes métodos sempre retornam um resultado não negativo. Operações de bits operam sobre um único bit da representação de complemento de seus operandos. Se necessário, o operando é sinal estendido para que ele conténha o bit designado. Nenhuma das operações de um único bit pode produzir um BigInteger com um sinal diferente do BigInteger em questão. Como eles afetam apenas um único bit, o infinito tamanho da palavra fornece abstração para esta classe, a qual garante que existem infinitos bits que precedem cada BigInteger. Todos os métodos e construtores desta classe apresentam como saída a expressão: NullPointerException quando passa-se uma referência de objeto nula para qualquer parâmetro de entrada (JAVA SE DOCUMENTATION, 2012) Principais Métodos Utilizados Além das operações aritméticas básicas, como: adição, subtração, multiplicação e divisão; serão utilizadas algumas operações adicionais, as quais estão detalhadas a seguir. Porém, todos os métodos estão baseados e caracterizados pela soma e subtração, que são as operações possíveis computacionalmente, não considerando a forma como as quais serão feitas pelo Java. a) Soma de dois valores public BigInteger add (BigInteger val) Parâmetro: Valor ao qual o atual valor BigInteger será acrescido. Retorno: BigInteger somado ao valor do parâmetro (this + val).

59 59 b) Subtração de dois valores public BigInteger subtract (BigInteger val) Parâmetro: Valor ao qual o atual valor BigInteger será subraído. Retorno: BigInteger subtraído do valor do parâmetro (this - val). c) Multiplicação de dois valores public BigInteger multiply (BigInteger val) Parâmetro: Valor ao qual o atual valor BigInteger será multiplicado. Retorno: BigInteger multiplicado ao valor do parâmetro (this * val). d) Divisão de dois valores public BigInteger divide (BigInteger val) Parâmetro: Valor pelo qual o atual valor BigInteger será divido. Retorno: Quociente da divisão do atual BigInteger pelo valor do parâmetro (this / val). Exceção: Val igual a 0. e) Exponenciação public BigInteger pow (int exponent) Parâmetro: Expoente ao qual a base BigInteger está elevada. Retorno: BigInteger elevado ao expoente (this exponent ). Exceção: Expoente negativo.

60 60 f) Módulo de dois valores public BigInteger remainder (BigInteger val) Parâmetro: Valor pelo qual o atual valor BigInteger será divido Retorno: Resto da divisão do atual BigInteger pelo valor do parâmetro (this / val). Exceção: Expoente negativo MÉTODO BINÁRIO PARA DIVISÃO DE GRANDES NÚMEROS Para a divisão de números expressivamente grandes, com grande quantidade de dígitos, formados a partir da exponenciação de base dois, foi utilizado o método de divisão apresentado a seguir descrito por ATKIN e BERNSTEIN em Por exemplo, para chegar-se ao resto da divisão de 2 p por p*2+1, temos: 1º PASSO: Transformar o p para binário; 2º PASSO: Considerar resto inicial igual a 1; 3º PASSO: Remover o primeiro bit de p. 4º PASSO: Caso o bit removido seja 1, multiplica-se o valor do resto 2 por 2. Caso o bit removido seja 0 mantêm o valor do resto 2. 5º PASSO: Efetua-se a congruência do resto 2 por p*2+1, atribuindo este valor ao resto; Este procedimento deve ser efetuado até que não tenha mais bits a serem removidos, isto é, a quantidade de bits define a quantidade de iterações. Caso a congruência seja 1, após a realização do loop, o número em questão é um número COMPOSTO, pois ele tem divisão exata.

61 61 Considerando p=23 para 2 p - 1: resto 2 Bits Restantes Remover bit Multiplicação por 2 Mod x 1=1 * x 2 = x 2= x 4= x 2 = x 32= x 2 = x 27= x 2 = Obs.: Inicia-se com resto 1. Quadro 14: Congruência pelo método binário Este método é bastante útil para o teste de primalidade através do teorema de Fermat e também para encontrar pequenos fatores dos números de mersenne. Se observarmos no quadro acima, podemos ver que temos números de tamanho reduzido, ou seja, como é efetuada a congruência após cada iteração, podemos concluir que este número jamais será maior que ((p*2) 2 )*2. Ao passo que uma exponenciação simples geraria um valor com grandes dimensões. Considerando o exemplo acima, com p = 23: Valor máximo possível pelo método Binário: Valor máximo pela exponenciação simples: ; Esta diferença se torna ainda mais visível considerando p = 607: Valor máximo possível pelo método Binário: Valor máximo pela exponenciação simples: (183 dígitos); 4.3. CONSTATAÇÕES ATRAVÉS DE TESTES OU PROVAS MATEMÁTICAS Os números primos apresentam inúmeras particularidades e por este motivo não existem algoritmos capazes de determinar se um número expressivamente grande é primo ou não em um tempo razoavelmente baixo, ou seja, não tem como calcular o próximo

62 62 número primo através de uma equação ou fórmula, mas sim, temos que testar cada número pra comprovar sua primalidade. A algoritmo crivo de Erastóstenes apresenta um resultado satisfatório se considerada a intenção de apresentar todos os números primos em um determinado intervalo de valores. Este algoritmo, pela sua forma de efetuar a seleção dos primos, não apresenta possibilidade de melhora. Isto é, ele puramente faz as multiplicações e elimina os produtos, e apresenta os valores que sobraram, ou seja, que não possuem divisores, e portanto, são primos. O algoritmo de Lucas-Lehmer é um teste determinístico muito eficiente, mas apenas aplicável aos números de mersenne. Os maiores números primos conhecidos são primos de mersenne justamente pelo fato de utilizar este algoritmo para o teste de primalidade. Porém, como já foi descrito neste trabalho, o maior número primo possui mais de 12 milhões de dígitos (GIMPS, 2012), e mesmo com o uso do algoritmo de Lucas-Lehmer, o teste de primalidade leva muito tempo. O único algoritmo determinístico e polinomial, que funciona para o teste de primalidade de qualquer número, é o AKS. Porém, como já foi dito anteriormente, na prática ele é muito lento, devido ao valor de entrada que é muito grande. O Teorema de Fermat, como já evidencia o nome, era apenas um teorema e que já foi comprovado que o teste de primalidade por este método não é garantido, ou seja, nem todos os números de Fermat são primos, e portanto, é um algoritmo probabilístico. Outra derivação dos números primos apresentada no trabalho, são os primos de Sophie Germain, que propriamente não é um teste de primalidade, mas sim uma definição de uma classe específica de números primos. Os números primos de Sophie Germain apresentam uma característica interessante que foi utilizada para apresentar algumas constatações que serão apresentadas no próximo subcapítulo Congruência prima mod. 30 Um teste básico que pode ser feito no início de cada algoritmo apresentado, é verificar a congruência do número a ser testado pelo produto dos 3 primeiros números primos. Isto se torna possível, pois uma congruência diferente, sempre será divisível por 2, 3 ou 5, já que o próximo número primo é o 7 o primeiro número não primo por sua causa é o 49 que é maior que 30.

63 63 Podemos tomar como referência os três primeiros números primos: 2, 3 e 5. O produto destes números é igual a: 2 x 3 x 5 = 30. Desta forma para que um número seja um possível número primo ele deve apresentar congruência 1, 7, 11, 13, 17, 19, 23, 29 mod. 30. Ou seja, a congruência deve ser um número primo, do contrário pode-se retornar composto para o número em questão. N mod. 30 Possível Primo Composto Primo x x x x x x x x x x x x x x x x Quadro 15: Congruência mod. 30 num determinado intervalo de números

64 Tempo em Segundos 64 Portanto percebemos que num intervalo de 30 valores, apenas 8 precisam ser testados, e destes 8 apenas 3 são realmente primos. Esta ocorrência de primos diminui na medida em que o tamanho dos números vai aumentando. Se compararmos o tempo de execução de dois algoritmos de força bruta, e introduzirmos este teste de congruência em um deles pode-se observar um ganho considerável no teste de primalidade para um determinado intervalo. Para o teste foram considerados intervalos de 30 números impares consecutivos a partir do valor de n. n Congruência Prima mod. 30 (segundos) Força Bruta (segundos) Diferença (segundos) Custo em Relação a Força Bruta (%) ,110 0,094-0, , ,139 2,028 0,889 56, ,939 8,738 3,799 56, ,05 40,01 23,96 40, ,112 98,167 46,055 53, Quadro 16: Congruência Prima mod. 30 x Força Bruta. O gráfico apresenta uma visualização da eficiência deste algoritmo de força bruta com a inclusão da congruência prima mod. 30. Ao passo que os números vão aumentando a diferença entre os mesmos se torna cada vez mais visível. Comparação de Desempenho Congruência Prima mod 30 Força Bruta Potência de Base 10 (Intervalo de 30 valores) Figura 15: Congruência Prima mod. 30 x Força Bruta.

65 Congruência 11, 23 ou 59 mod. 60 Caso um número tenha congruência 11, 23 ou 59 mod. 60, ele pode ser testado pelo algoritmo do teorema de Fermat, e apresentará uma grande possibilidade de ser um número primo, caso apresente as características desejadas, isto porque, são estas congruências que também satisfazem as características apresentadas para os primos de Sophie Germain. O teste consiste basicamente em: n = número a ser testado; SE n primo (mod. 30) então: SE (2 (n-1)/2 1 0 (mod. n)) então: Retorna PROVÁVEL PRIMO; SENÃO Retorna COMPOSTO; Este teste é bastante eficiente, porém é um teste probabilístico. No quadro abaixo consta a incidência de primos e falsos primos em um determinado intervalo proposto. Intervalo Quant. total de primos Quant. de Primos 11, 23, 59 mod. 60 Incidência (%) Falsos Primos Incidência 0 a , a ,77 2 0, a ,78 3 0, a ,76 3 0, a ,75 4 0, a ,76 5 0, a ,76 5 0, a ,77 5 0, a ,76 5 0, a ,76 5 0,00401 Quadro 17: Incidência de primos e falsos primos com congruência 11, 23 e 59 mod. 60. (%) O quadro abaixo apresenta todos os falsos primos menores que 10 8 ( ), com os seus respectivos divisores que os tornam números compostos.

66 Intervalo ( x 10 6 ) 66 Congruência mod. 60 Falso Primo Divisor Quadro 18: Lista de Falsos Primos com Congruência 11, 23, 59 mod. 60. Pode-se claramente observar na medida em que os números vão aumentando de proporção, a probabilidade do teste falhar é cada vez menor. Na figura abaixo é apresentada esta constatação. Falsos Primos 90 a a a a a a a a a 20 0 a 10 Falsos Primos Quantidade de Falsos Primos Figura 16: Incidência de Falsos Primos em cada intervalo

¹CPTL/UFMS, Três Lagoas, MS,Brasil, oliveiralimarafael@hotmail.com. ²CPTL/UFMS, Três Lagoas, MS, Brasil.

¹CPTL/UFMS, Três Lagoas, MS,Brasil, oliveiralimarafael@hotmail.com. ²CPTL/UFMS, Três Lagoas, MS, Brasil. Encontro de Ensino, Pesquisa e Extensão, Presidente Prudente, 22 a 25 de outubro, 2012 36 INTRODUÇÃO A CRIPTOGRAFIA RSA Rafael Lima Oliveira¹, Prof. Dr. Fernando Pereira de Souza². ¹CPTL/UFMS, Três Lagoas,

Leia mais

Curso: Técnico de Informática Disciplina: Redes de Computadores. 1- Apresentação Binária

Curso: Técnico de Informática Disciplina: Redes de Computadores. 1- Apresentação Binária 1- Apresentação Binária Os computadores funcionam e armazenam dados mediante a utilização de chaves eletrônicas que são LIGADAS ou DESLIGADAS. Os computadores só entendem e utilizam dados existentes neste

Leia mais

O que é número primo? Série O que é?

O que é número primo? Série O que é? O que é número primo? Série O que é? Objetivos 1. Discutir o significado da palavra número primo no contexto da Matemática; 2. Apresentar idéias básicas sobre criptografia. O que é número primo? Série

Leia mais

Arquitetura de Rede de Computadores

Arquitetura de Rede de Computadores TCP/IP Roteamento Arquitetura de Rede de Prof. Pedro Neto Aracaju Sergipe - 2011 Ementa da Disciplina 4. Roteamento i. Máscara de Rede ii. Sub-Redes iii. Números Binários e Máscara de Sub-Rede iv. O Roteador

Leia mais

MA14 - Aritmética Unidade 24 Resumo

MA14 - Aritmética Unidade 24 Resumo MA14 - Aritmética Unidade 24 Resumo Introdução à Criptografia Abramo Hefez PROFMAT - SBM Aviso Este material é apenas um resumo de parte do conteúdo da disciplina e o seu estudo não garante o domínio do

Leia mais

Resíduos Quadráticos e Fatoração: uma aplicação à criptoanálise do RSA

Resíduos Quadráticos e Fatoração: uma aplicação à criptoanálise do RSA Resíduos Quadráticos e Fatoração: uma aplicação à criptoanálise do RSA Charles F. de Barros 20 de novembro de 2008 Resumo Faremos uma breve introdução ao conceito de resíduos quadráticos, descrevendo em

Leia mais

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES 3.1 - IDENTIFICADORES Os objetos que usamos no nosso algoritmo são uma representação simbólica de um valor de dado. Assim, quando executamos a seguinte instrução:

Leia mais

Protocolo TCP/IP. Neste caso cada computador da rede precisa de, pelo menos, dois parâmetros configurados:

Protocolo TCP/IP. Neste caso cada computador da rede precisa de, pelo menos, dois parâmetros configurados: Protocolo TCP/IP Neste caso cada computador da rede precisa de, pelo menos, dois parâmetros configurados: Número IP Máscara de sub-rede O Número IP é um número no seguinte formato: x.y.z.w Não podem existir

Leia mais

1. NÍVEL CONVENCIONAL DE MÁQUINA

1. NÍVEL CONVENCIONAL DE MÁQUINA 1. NÍVEL CONVENCIONAL DE MÁQUINA Relembrando a nossa matéria de Arquitetura de Computadores, a arquitetura de Computadores se divide em vários níveis como já estudamos anteriormente. Ou seja: o Nível 0

Leia mais

Bases Matemáticas. Aula 2 Métodos de Demonstração. Rodrigo Hausen. v. 2013-7-31 1/15

Bases Matemáticas. Aula 2 Métodos de Demonstração. Rodrigo Hausen. v. 2013-7-31 1/15 Bases Matemáticas Aula 2 Métodos de Demonstração Rodrigo Hausen v. 2013-7-31 1/15 Como o Conhecimento Matemático é Organizado Definições Definição: um enunciado que descreve o significado de um termo.

Leia mais

2. Representação Numérica

2. Representação Numérica 2. Representação Numérica 2.1 Introdução A fim se realizarmos de maneira prática qualquer operação com números, nós precisamos representa-los em uma determinada base numérica. O que isso significa? Vamos

Leia mais

PARANÁ GOVERNO DO ESTADO

PARANÁ GOVERNO DO ESTADO A COMUNICAÇÃO NA INTERNET PROTOCOLO TCP/IP Para tentar facilitar o entendimento de como se dá a comunicação na Internet, vamos começar contando uma história para fazer uma analogia. Era uma vez, um estrangeiro

Leia mais

Prof. Rafael Gross. rafael.gross@fatec.sp.gov.br

Prof. Rafael Gross. rafael.gross@fatec.sp.gov.br Prof. Rafael Gross rafael.gross@fatec.sp.gov.br Todo protocolo define um tipo de endereçamento para identificar o computador e a rede. O IP tem um endereço de 32 bits, este endereço traz o ID (identificador)

Leia mais

I Seminário sobre Segurança da Informação e Comunicações CRIPTOGRAFIA

I Seminário sobre Segurança da Informação e Comunicações CRIPTOGRAFIA I Seminário sobre Segurança da Informação e Comunicações CRIPTOGRAFIA OBJETIVO Conhecer aspectos básicos do uso da criptografia como instrumento da SIC.. Abelardo Vieira Cavalcante Filho Assistente Técnico

Leia mais

Exercícios Teóricos Resolvidos

Exercícios Teóricos Resolvidos Universidade Federal de Minas Gerais Instituto de Ciências Exatas Departamento de Matemática Exercícios Teóricos Resolvidos O propósito deste texto é tentar mostrar aos alunos várias maneiras de raciocinar

Leia mais

Organização e Arquitetura de Computadores I

Organização e Arquitetura de Computadores I Organização e Arquitetura de Computadores I Aritmética Computacional Slide 1 Sumário Unidade Lógica e Aritmética Representação de Números Inteiros Aritmética de Números Inteiros Representação de Números

Leia mais

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá.

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá. INTRODUÇÃO A lógica de programação é extremamente necessária para as pessoas que queiram trabalhar na área de programação, seja em qualquer linguagem de programação, como por exemplo: Pascal, Visual Basic,

Leia mais

Pesquisa com Professores de Escolas e com Alunos da Graduação em Matemática

Pesquisa com Professores de Escolas e com Alunos da Graduação em Matemática Pesquisa com Professores de Escolas e com Alunos da Graduação em Matemática Rene Baltazar Introdução Serão abordados, neste trabalho, significados e características de Professor Pesquisador e as conseqüências,

Leia mais

SERVIÇO PÚBLICO FEDERAL UNIVERSIDADE FEDERAL DA FRONTEIRA SUL COMISSÃO PERMANENTE DO PROCESSO SELETIVO DÚVIDAS FREQUENTES

SERVIÇO PÚBLICO FEDERAL UNIVERSIDADE FEDERAL DA FRONTEIRA SUL COMISSÃO PERMANENTE DO PROCESSO SELETIVO DÚVIDAS FREQUENTES DÚVIDAS FREQUENTES A UFFS abre mais de um Processo Seletivo no mesmo ano? Não. Há apenas um Processo Seletivo por ano. Nele, você pode optar por cursos que começam no primeiro ou no segundo semestre, mas

Leia mais

INE5403 - Fundamentos de Matemática Discreta para a Computação

INE5403 - Fundamentos de Matemática Discreta para a Computação INE5403 - Fundamentos de Matemática Discreta para a Computação 2) Fundamentos 2.1) Conjuntos e Sub-conjuntos 2.2) Números Inteiros 2.3) Funções 2.4) Seqüências e Somas 2.5) Crescimento de Funções Divisão

Leia mais

O Fascínio dos Números Primos

O Fascínio dos Números Primos Centro de Matemática da Universidade do Porto Departamento de Matemática da FCUP Universidade Popular do Porto 9 de Junho de 2010 A forma dos números Figura: Duas maneiras diferentes de ver um quadrado

Leia mais

Batalha Naval Algoritmos de Busca. Correlações curriculares Matemática: Números: maior que, menor que, iguais a.

Batalha Naval Algoritmos de Busca. Correlações curriculares Matemática: Números: maior que, menor que, iguais a. Atividade 6 Batalha Naval Algoritmos de Busca Sumário Computadores são freqüentemente requisitados a encontrar informação em grandes coleções de dados. Estes precisam desenvolver métodos rápidos e eficientes

Leia mais

Material Teórico - Módulo de Divisibilidade. MDC e MMC - Parte 1. Sexto Ano. Prof. Angelo Papa Neto

Material Teórico - Módulo de Divisibilidade. MDC e MMC - Parte 1. Sexto Ano. Prof. Angelo Papa Neto Material Teórico - Módulo de Divisibilidade MDC e MMC - Parte 1 Sexto Ano Prof. Angelo Papa Neto 1 Máximo divisor comum Nesta aula, definiremos e estudaremos métodos para calcular o máximo divisor comum

Leia mais

Álgebra A - Aula 11 RSA

Álgebra A - Aula 11 RSA Álgebra A - Aula 11 RSA Elaine Pimentel Departamento de Matemática, UFMG, Brazil 2 o Semestre - 2010 Criptografia RSA- pré-codificação Converter a mensagem em uma seqüência de números pré-codificação.

Leia mais

Equações do segundo grau

Equações do segundo grau Módulo 1 Unidade 4 Equações do segundo grau Para início de conversa... Nesta unidade, vamos avançar um pouco mais nas resoluções de equações. Na unidade anterior, você estudou sobre as equações de primeiro

Leia mais

Orientação a Objetos

Orientação a Objetos 1. Domínio e Aplicação Orientação a Objetos Um domínio é composto pelas entidades, informações e processos relacionados a um determinado contexto. Uma aplicação pode ser desenvolvida para automatizar ou

Leia mais

Cálculo Numérico Aula 1: Computação numérica. Tipos de Erros. Aritmética de ponto flutuante

Cálculo Numérico Aula 1: Computação numérica. Tipos de Erros. Aritmética de ponto flutuante Cálculo Numérico Aula : Computação numérica. Tipos de Erros. Aritmética de ponto flutuante Computação Numérica - O que é Cálculo Numérico? Cálculo numérico é uma metodologia para resolver problemas matemáticos

Leia mais

AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS

AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS EXATAS E NATURAIS CURSO DE CIÊNCIAS DA COMPUTAÇÃO BACHARELADO AMBIENTE PARA AUXILIAR O DESENVOLVIMENTO DE PROGRAMAS MONOLÍTICOS Orientando: Oliver Mário

Leia mais

Dadas a base e a altura de um triangulo, determinar sua área.

Dadas a base e a altura de um triangulo, determinar sua área. Disciplina Lógica de Programação Visual Ana Rita Dutra dos Santos Especialista em Novas Tecnologias aplicadas a Educação Mestranda em Informática aplicada a Educação ana.santos@qi.edu.br Conceitos Preliminares

Leia mais

SUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2

SUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2 SUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2 1.1 Introdução... 2 1.2 Estrutura do IP... 3 1.3 Tipos de IP... 3 1.4 Classes de IP... 4 1.5 Máscara de Sub-Rede... 6 1.6 Atribuindo um IP ao computador... 7 2

Leia mais

5 Equacionando os problemas

5 Equacionando os problemas A UA UL LA Equacionando os problemas Introdução Nossa aula começará com um quebra- cabeça de mesa de bar - para você tentar resolver agora. Observe esta figura feita com palitos de fósforo. Mova de lugar

Leia mais

Criptografia e Segurança em Redes Capítulo 9. Quarta Edição William Stallings

Criptografia e Segurança em Redes Capítulo 9. Quarta Edição William Stallings Criptografia e Segurança em Redes Capítulo 9 Quarta Edição William Stallings Capítulo 9 - Public Key Cryptography e RSA Cada egípicio recebia dois nomes que eram conhecidos respectivamente como o nome

Leia mais

UNIVERSIDADE ESTADUAL DE GOIÁS UNIDADE UNIVERSITÁRIA DE JUSSARA LICENCIATURA EM MATEMÁTICA ANA PAULA ALVES MACHADO DE LIMA

UNIVERSIDADE ESTADUAL DE GOIÁS UNIDADE UNIVERSITÁRIA DE JUSSARA LICENCIATURA EM MATEMÁTICA ANA PAULA ALVES MACHADO DE LIMA UNIVERSIDADE ESTADUAL DE GOIÁS UNIDADE UNIVERSITÁRIA DE JUSSARA LICENCIATURA EM MATEMÁTICA ANA PAULA ALVES MACHADO DE LIMA A HISTÓRIA DA CRIPTOGRAFIA E A APLICAÇÃO DE TEORIA DOS NÚMEROS EM CRIPTOGRAFIA

Leia mais

8 8 (mod 17) e 3 34 = (3 17 ) 2 9 (mod 17). Daí que 2 67 + 3 34 8 + 9 0 (mod 17), o que significa que 2 67 + 3 34 é múltiplo de 17.

8 8 (mod 17) e 3 34 = (3 17 ) 2 9 (mod 17). Daí que 2 67 + 3 34 8 + 9 0 (mod 17), o que significa que 2 67 + 3 34 é múltiplo de 17. Prova Teoria de Números 23/04/203 Nome: RA: Escolha 5 questões.. Mostre que 2 67 + 3 34 é múltiplo de 7. Solução: Pelo teorema de Fermat 2 6 (mod 7 e 3 7 3 (mod 7. Portanto, 2 67 = 2 64+3 = ( 2 6 4 8 8

Leia mais

Unidade 5: Sistemas de Representação

Unidade 5: Sistemas de Representação Arquitetura e Organização de Computadores Atualização: 9/8/ Unidade 5: Sistemas de Representação Números de Ponto Flutuante IEEE 754/8 e Caracteres ASCII Prof. Daniel Caetano Objetivo: Compreender a representação

Leia mais

Assinatura Digital: problema

Assinatura Digital: problema Assinatura Digital Assinatura Digital Assinatura Digital: problema A autenticidade de muitos documentos, é determinada pela presença de uma assinatura autorizada. Para que os sistemas de mensagens computacionais

Leia mais

MÓDULO 6 INTRODUÇÃO À PROBABILIDADE

MÓDULO 6 INTRODUÇÃO À PROBABILIDADE MÓDULO 6 INTRODUÇÃO À PROBBILIDDE Quando estudamos algum fenômeno através do método estatístico, na maior parte das vezes é preciso estabelecer uma distinção entre o modelo matemático que construímos para

Leia mais

Matemática - UEL - 2010 - Compilada em 18 de Março de 2010. Prof. Ulysses Sodré Matemática Essencial: http://www.mat.uel.

Matemática - UEL - 2010 - Compilada em 18 de Março de 2010. Prof. Ulysses Sodré Matemática Essencial: http://www.mat.uel. Matemática Essencial Equações do Segundo grau Conteúdo Matemática - UEL - 2010 - Compilada em 18 de Março de 2010. Prof. Ulysses Sodré Matemática Essencial: http://www.mat.uel.br/matessencial/ 1 Introdução

Leia mais

Por que o quadrado de terminados em 5 e ta o fa cil? Ex.: 15²=225, 75²=5625,...

Por que o quadrado de terminados em 5 e ta o fa cil? Ex.: 15²=225, 75²=5625,... Por que o quadrado de terminados em 5 e ta o fa cil? Ex.: 15²=225, 75²=5625,... 0) O que veremos na aula de hoje? Um fato interessante Produtos notáveis Equação do 2º grau Como fazer a questão 5 da 3ª

Leia mais

ALGORITMOS PARTE 01. Fabricio de Sousa Pinto

ALGORITMOS PARTE 01. Fabricio de Sousa Pinto ALGORITMOS PARTE 01 Fabricio de Sousa Pinto Algoritmos: Definição 2 É uma sequência de instruções finita e ordenada de forma lógica para a resolução de uma determinada tarefa ou problema. Algoritmos 3

Leia mais

Contagem I. Figura 1: Abrindo uma Porta.

Contagem I. Figura 1: Abrindo uma Porta. Polos Olímpicos de Treinamento Curso de Combinatória - Nível 2 Prof. Bruno Holanda Aula 4 Contagem I De quantos modos podemos nos vestir? Quantos números menores que 1000 possuem todos os algarismos pares?

Leia mais

Pesquisa Sequencial e Binária. Introdução à Programação SI2

Pesquisa Sequencial e Binária. Introdução à Programação SI2 Pesquisa Sequencial e Binária Introdução à Programação SI2 3 Contexto Diferentes estratégias para pesquisa (busca) de um elemento específico em um conjunto de dados. Lista, array, coleção Operação importante,

Leia mais

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br Introdução O computador como ferramenta indispensável: Faz parte das nossas vidas; Por si só não faz nada de útil; Grande capacidade de resolução

Leia mais

Possui como idéia central a divisão de um universo de dados a ser organizado em subconjuntos mais gerenciáveis.

Possui como idéia central a divisão de um universo de dados a ser organizado em subconjuntos mais gerenciáveis. 3. Tabelas de Hash As tabelas de hash são um tipo de estruturação para o armazenamento de informação, de uma forma extremamente simples, fácil de se implementar e intuitiva de se organizar grandes quantidades

Leia mais

Fundamentos em Informática (Sistemas de Numeração e Representação de Dados)

Fundamentos em Informática (Sistemas de Numeração e Representação de Dados) 1 UNIVERSIDADE DO CONTESTADO / UnC CAMPUS CONCÓRDIA/SC CURSO DE SISTEMAS DE INFORMAÇÃO Fundamentos em Informática (Sistemas de Numeração e Representação de Dados) (Apostila da disciplina elaborada pelo

Leia mais

Sistemas de Numeração. Professor: Rogério R. de Vargas INFORMÁTICA 2014/2

Sistemas de Numeração. Professor: Rogério R. de Vargas INFORMÁTICA 2014/2 INFORMÁTICA Sistemas de Numeração Professor: Rogério R. de Vargas 2014/2 Sistemas de Numeração São sistemas de notação usados para representar quantidades abstratas denominadas números. Um sistema numérico

Leia mais

Tópico 2. Conversão de Unidades e Notação Científica

Tópico 2. Conversão de Unidades e Notação Científica Tópico 2. Conversão de Unidades e Notação Científica Toda vez que você se refere a um valor ligado a uma unidade de medir, significa que, de algum modo, você realizou uma medição. O que você expressa é,

Leia mais

MANUAL DO USUÁRIO SORE Sistema Online de Reservas de Equipamento. Toledo PR. Versão 2.0 - Atualização 26/01/2009 Depto de TI - FASUL Página 1

MANUAL DO USUÁRIO SORE Sistema Online de Reservas de Equipamento. Toledo PR. Versão 2.0 - Atualização 26/01/2009 Depto de TI - FASUL Página 1 MANUAL DO USUÁRIO SORE Sistema Online de Reservas de Equipamento Toledo PR Página 1 INDICE 1. O QUE É O SORE...3 2. COMO ACESSAR O SORE... 4 2.1. Obtendo um Usuário e Senha... 4 2.2. Acessando o SORE pelo

Leia mais

CAP. I ERROS EM CÁLCULO NUMÉRICO

CAP. I ERROS EM CÁLCULO NUMÉRICO CAP. I ERROS EM CÁLCULO NUMÉRICO 0. Introdução Por método numérico entende-se um método para calcular a solução de um problema realizando apenas uma sequência finita de operações aritméticas. A obtenção

Leia mais

Resolução de problemas e desenvolvimento de algoritmos

Resolução de problemas e desenvolvimento de algoritmos SSC0101 - ICC1 Teórica Introdução à Ciência da Computação I Resolução de problemas e desenvolvimento de algoritmos Prof. Vanderlei Bonato Prof. Cláudio Fabiano Motta Toledo Sumário Análise e solução de

Leia mais

Entendendo como funciona o NAT

Entendendo como funciona o NAT Entendendo como funciona o NAT Vamos inicialmente entender exatamente qual a função do NAT e em que situações ele é indicado. O NAT surgiu como uma alternativa real para o problema de falta de endereços

Leia mais

As fases na resolução de um problema real podem, de modo geral, ser colocadas na seguinte ordem:

As fases na resolução de um problema real podem, de modo geral, ser colocadas na seguinte ordem: 1 As notas de aula que se seguem são uma compilação dos textos relacionados na bibliografia e não têm a intenção de substituir o livro-texto, nem qualquer outra bibliografia. Introdução O Cálculo Numérico

Leia mais

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO Capítulo 1 INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO 1.1 Histórico de Linguagens de Programação Para um computador executar uma dada tarefa é necessário que se informe a ele, de uma maneira clara, como ele

Leia mais

ICC Introdução para JavaScript

ICC Introdução para JavaScript ICC Introdução para JavaScript Arquitetura Genérica de um Computador Máquina de Von Neumann Diagrama conhecido como Máquina de Von Neumann (grande nome da informática) A finalidade de um computador é receber,

Leia mais

Sistema de Numeração e Conversão entre Sistemas. Prof. Rômulo Calado Pantaleão Camara. Carga Horária: 60h

Sistema de Numeração e Conversão entre Sistemas. Prof. Rômulo Calado Pantaleão Camara. Carga Horária: 60h Sistema de Numeração e Conversão entre Sistemas. Prof. Rômulo Calado Pantaleão Camara Carga Horária: 60h Representação de grandeza com sinal O bit mais significativo representa o sinal: 0 (indica um número

Leia mais

A importância da Senha. Mas por que as senhas existem?

A importância da Senha. Mas por que as senhas existem? 1 A importância da Senha Atualmente a quantidade de sistemas (Bancos, E-mail, Intranet, Rede Local etc) que precisamos utilizar no dia-a-dia é extremamente grande e ao mesmo tempo acaba sendo um tanto

Leia mais

Sistemas de Numeração

Sistemas de Numeração Sistemas de Numeração Um numeral é um símbolo ou grupo de símbolos que representa um número em um determinado instante da evolução do homem. Tem-se que, numa determinada escrita ou época, os numerais diferenciaram-se

Leia mais

Sistemas de Numerações.

Sistemas de Numerações. Matemática Profº: Carlos Roberto da Silva; Lourival Pereira Martins. Sistema de numeração: Binário, Octal, Decimal, Hexadecimal; Sistema de numeração: Conversões; Sistemas de Numerações. Nosso sistema

Leia mais

Capacidade = 512 x 300 x 20000 x 2 x 5 = 30.720.000.000 30,72 GB

Capacidade = 512 x 300 x 20000 x 2 x 5 = 30.720.000.000 30,72 GB Calculando a capacidade de disco: Capacidade = (# bytes/setor) x (méd. # setores/trilha) x (# trilhas/superfície) x (# superfícies/prato) x (# pratos/disco) Exemplo 01: 512 bytes/setor 300 setores/trilha

Leia mais

O conceito de probabilidade

O conceito de probabilidade A UA UL LA O conceito de probabilidade Introdução Nesta aula daremos início ao estudo da probabilidades. Quando usamos probabilidades? Ouvimos falar desse assunto em situações como: a probabilidade de

Leia mais

Pesquisa Sequencial e Binária

Pesquisa Sequencial e Binária Pesquisa Sequencial e Binária Prof. Wylliams Barbosa Santos wylliamss@gmail.com Introdução à Programação Crédito de Conteúdo: Professora Ceça Moraes Agenda Pesquisa Sequencial Noções de complexidade Pesquisa

Leia mais

Este material traz a teoria necessária à resolução das questões propostas.

Este material traz a teoria necessária à resolução das questões propostas. Inclui Teoria e Questões Inteiramente Resolvidas dos assuntos: Contagem: princípio aditivo e multiplicativo. Arranjo. Permutação. Combinação simples e com repetição. Lógica sentencial, de primeira ordem

Leia mais

DIFERENTES POVOS E SUAS TÉCNICAS DE MULTIPLICAR. Palavras-chave: Multiplicação; Egípcio; Russo; Chinês; Gelosia.

DIFERENTES POVOS E SUAS TÉCNICAS DE MULTIPLICAR. Palavras-chave: Multiplicação; Egípcio; Russo; Chinês; Gelosia. DIFERENTES POVOS E SUAS TÉCNICAS DE MULTIPLICAR Micheli Cristina Starosky Roloff Instituto Federal Catarinense Campus Camboriú micheli_roloff@ifc-camboriu.edu.br Resumo: Ao longo dos tempos, diferentes

Leia mais

Questionário de Estudo - P1 Criptografia

Questionário de Estudo - P1 Criptografia Questionário de Estudo - P1 Criptografia 1) A criptografia e a criptoanálise são dois ramos da criptologia. Qual a diferença entre essas duas artes? Enquanto a Criptografia é a arte de esconder dados e

Leia mais

C R I P T O G R A F I A

C R I P T O G R A F I A Faculdade de Ciência e Tecnologia C R I P T O G R A F I A A CRIPTOGRAFIA NA SEGURANÇA DE DADOS Rodrigo Alves Silas Ribas Zenilson Apresentando Cripto vem do grego kryptós e significa oculto, envolto, escondido.

Leia mais

Circuitos Digitais. Conteúdo. Sistema de Numeração e Códigos :: Conversões de Binário para Decimal SISTEMA DE NUMERAÇÃO E CÓDIGOS

Circuitos Digitais. Conteúdo. Sistema de Numeração e Códigos :: Conversões de Binário para Decimal SISTEMA DE NUMERAÇÃO E CÓDIGOS Ciência da Computação Sistemas de Numeração e Conversões Prof. Sergio Ribeiro Material adaptado das aulas do Prof. José Maria da UFPI Conteúdo Conversões de binário para decimal. Conversões de decimal

Leia mais

Algoritmos não se aprendem: Copiando algoritmos Estudando algoritmos Algoritmos só se aprendem: Construindo algoritmos Testando algoritmos

Algoritmos não se aprendem: Copiando algoritmos Estudando algoritmos Algoritmos só se aprendem: Construindo algoritmos Testando algoritmos 1. INTRODUÇÃO A ALGORITMOS O uso de algoritmos é quase tão antigo quanto a matemática. Com o passar do tempo, entretanto, ele foi bastante esquecido pela matemática. Com o advento das máquinas de calcular

Leia mais

Escola Secundária c/3º CEB José Macedo Fragateiro. Curso Profissional de Nível Secundário. Componente Técnica. Disciplina de

Escola Secundária c/3º CEB José Macedo Fragateiro. Curso Profissional de Nível Secundário. Componente Técnica. Disciplina de Escola Secundária c/3º CEB José Macedo Fragateiro Curso Profissional de Nível Secundário Componente Técnica Disciplina de Sistemas Digitais e Arquitectura de Computadores 29/21 Módulo 1: Sistemas de Numeração

Leia mais

Disciplina: Unidade III: Prof.: E-mail: Período:

Disciplina: Unidade III: Prof.: E-mail: Período: Encontro 08 Disciplina: Sistemas de Banco de Dados Unidade III: Modelagem Lógico de Dados Prof.: Mario Filho E-mail: pro@mariofilho.com.br Período: 5º. SIG - ADM Relembrando... Necessidade de Dados Projeto

Leia mais

Manual SAGe Versão 1.2 (a partir da versão 12.08.01)

Manual SAGe Versão 1.2 (a partir da versão 12.08.01) Manual SAGe Versão 1.2 (a partir da versão 12.08.01) Submissão de Relatórios Científicos Sumário Introdução... 2 Elaboração do Relatório Científico... 3 Submissão do Relatório Científico... 14 Operação

Leia mais

Título. Breve descrição da aula. Competência(s) desenvolvida(s) Conteúdo(s) desenvolvido(s).

Título. Breve descrição da aula. Competência(s) desenvolvida(s) Conteúdo(s) desenvolvido(s). Universidade Federal de Goiás Campus Catalão Alunos: Bruno Castilho Rosa Laura Thaís Lourenço Géssica Cristina dos Reis Lucas Borges de Faria Orientador: Igor Lima Seminário Semanal de Álgebra Notas de

Leia mais

x0 = 1 x n = 3x n 1 x k x k 1 Quantas são as sequências com n letras, cada uma igual a a, b ou c, de modo que não há duas letras a seguidas?

x0 = 1 x n = 3x n 1 x k x k 1 Quantas são as sequências com n letras, cada uma igual a a, b ou c, de modo que não há duas letras a seguidas? Recorrências Muitas vezes não é possível resolver problemas de contagem diretamente combinando os princípios aditivo e multiplicativo. Para resolver esses problemas recorremos a outros recursos: as recursões

Leia mais

computador-cálculo numérico perfeita. As fases na resolução de um problema real podem, de modo geral, ser colocadas na seguinte ordem:

computador-cálculo numérico perfeita. As fases na resolução de um problema real podem, de modo geral, ser colocadas na seguinte ordem: 1 UNIVERSIDADE FEDERAL DE VIÇOSA Departamento de Matemática - CCE Cálculo Numérico - MAT 271 Prof.: Valéria Mattos da Rosa As notas de aula que se seguem são uma compilação dos textos relacionados na bibliografia

Leia mais

Equações do primeiro grau

Equações do primeiro grau Módulo 1 Unidade 3 Equações do primeiro grau Para início de conversa... Você tem um telefone celular ou conhece alguém que tenha? Você sabia que o telefone celular é um dos meios de comunicação que mais

Leia mais

Sistemas Distribuídos: Conceitos e Projeto Introdução a Criptografia e Criptografia Simétrica

Sistemas Distribuídos: Conceitos e Projeto Introdução a Criptografia e Criptografia Simétrica Sistemas Distribuídos: Conceitos e Projeto Introdução a Criptografia e Criptografia Simétrica Francisco José da Silva e Silva Laboratório de Sistemas Distribuídos (LSD) Departamento de Informática / UFMA

Leia mais

1.1. Organização de um Sistema Computacional

1.1. Organização de um Sistema Computacional 1. INTRODUÇÃO 1.1. Organização de um Sistema Computacional Desde a antiguidade, o homem vem desenvolvendo dispositivos elétricoeletrônicos (hardware) que funciona com base em instruções e que são capazes

Leia mais

Aplicações de Combinatória e Geometria na Teoria dos Números

Aplicações de Combinatória e Geometria na Teoria dos Números Aplicações de Combinatória e Geometria na Teoria dos Números Nesse artigo vamos discutir algumas abordagens diferentes na Teoria dos Números, no sentido de envolverem também outras grandes áreas, como

Leia mais

QUADRADO MÁGICO - ORDEM 4

QUADRADO MÁGICO - ORDEM 4 CONCEITO Partindo da definição original, os QUADRADOS MÁGICOS devem satisfazer três condições: a) tabela ou matriz quadrada (número de igual ao número de ); b) domínio: com elementos assumindo valores

Leia mais

3 Sistemas de Numeração:

3 Sistemas de Numeração: 3 Sistemas de Numeração: Os computadores eletrônicos têm como base para seu funcionamento a utilização de eletricidade. Diferente de outras máquinas que a presença ou ausência de eletricidade apenas significam

Leia mais

Curso de Graduação em Administração. Administração da Produção e Operações I

Curso de Graduação em Administração. Administração da Produção e Operações I Curso de Graduação em Administração Administração da Produção e Operações I 22º Encontro - 11/05/2012 18:50 às 20:30h COMO SERÁ NOSSO ENCONTRO HOJE? - ABERTURA - CAPACIDADE E TURNOS DE TRABALHO. 02 Introdução

Leia mais

Síntese das discussões do fórum Livro-APF: Julho/2010

Síntese das discussões do fórum Livro-APF: Julho/2010 Síntese das discussões do fórum Livro-APF: Julho/2010 Assunto: Estimativa de Aumento de Produtividade Data: 01/07/2010 Link: http://br.groups.yahoo.com/group/livro-apf/message/2577 Dúvida: Existe alguma

Leia mais

[a11 a12 a1n 4. SISTEMAS LINEARES 4.1. CONCEITO. Um sistema de equações lineares é um conjunto de equações do tipo

[a11 a12 a1n 4. SISTEMAS LINEARES 4.1. CONCEITO. Um sistema de equações lineares é um conjunto de equações do tipo 4. SISTEMAS LINEARES 4.1. CONCEITO Um sistema de equações lineares é um conjunto de equações do tipo a 11 x 1 + a 12 x 2 +... + a 1n x n = b 1 a 11 x 1 + a 12 x 2 +... + a 1n x n = b 2... a n1 x 1 + a

Leia mais

REVISÃO E AVALIAÇÃO DA MATEMÁTICA

REVISÃO E AVALIAÇÃO DA MATEMÁTICA 2 Aula 45 REVISÃO E AVALIAÇÃO DA 3 Vídeo Arredondamento de números. 4 Arredondamento de números Muitas situações cotidianas envolvendo valores destinados à contagem, podem ser facilitadas utilizando o

Leia mais

2 Diagrama de Caso de Uso

2 Diagrama de Caso de Uso Unified Modeling Language (UML) Universidade Federal do Maranhão UFMA Pós Graduação de Engenharia de Eletricidade Grupo de Computação Assunto: Diagrama de Caso de Uso (Use Case) Autoria:Aristófanes Corrêa

Leia mais

Pontifícia Universidade Católica do Rio Grande do Sul Faculdade de Engenharia Disciplina de Lógica Computacional Aplicada. Prof. Dr.

Pontifícia Universidade Católica do Rio Grande do Sul Faculdade de Engenharia Disciplina de Lógica Computacional Aplicada. Prof. Dr. Índice 1. SISTEMAS NUMÉRICOS 1.1 Caracterização dos Sistemas Numéricos 1.2 Sistemas Numéricos em uma Base B Qualquer 1.2.1 Sistema de Numeração Decimal 1.2.2. Sistema de Numeração Binário 1.2.3 Sistema

Leia mais

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA INTRODUÇÃO À ORGANIZAÇÃO DE COMPUTADORES

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA INTRODUÇÃO À ORGANIZAÇÃO DE COMPUTADORES LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA INTRODUÇÃO À ORGANIZAÇÃO DE COMPUTADORES Prof. Dr. Daniel Caetano 2012-1 Objetivos Apresentar o funcionamento do computador Apresentar a função da memória e dos dispositivos

Leia mais

3. Arquitetura Básica do Computador

3. Arquitetura Básica do Computador 3. Arquitetura Básica do Computador 3.1. Modelo de Von Neumann Dar-me-eis um grão de trigo pela primeira casa do tabuleiro; dois pela segunda, quatro pela terceira, oito pela quarta, e assim dobrando sucessivamente,

Leia mais

Processos Técnicos - Aulas 4 e 5

Processos Técnicos - Aulas 4 e 5 Processos Técnicos - Aulas 4 e 5 Trabalho / PEM Tema: Frameworks Públicos Grupo: equipe do TCC Entrega: versão digital, 1ª semana de Abril (de 31/03 a 04/04), no e-mail do professor (rodrigues.yuri@yahoo.com.br)

Leia mais

a 1 x 1 +... + a n x n = b,

a 1 x 1 +... + a n x n = b, Sistemas Lineares Equações Lineares Vários problemas nas áreas científica, tecnológica e econômica são modelados por sistemas de equações lineares e requerem a solução destes no menor tempo possível Definição

Leia mais

Capítulo 3. Avaliação de Desempenho. 3.1 Definição de Desempenho

Capítulo 3. Avaliação de Desempenho. 3.1 Definição de Desempenho 20 Capítulo 3 Avaliação de Desempenho Este capítulo aborda como medir, informar e documentar aspectos relativos ao desempenho de um computador. Além disso, descreve os principais fatores que influenciam

Leia mais

Computadores XXI: Busca e execução Final

Computadores XXI: Busca e execução Final Computadores XXI: Busca e execução Final A6 Texto 6 http://www.bpiropo.com.br/fpc20060123.htm Sítio Fórum PCs /Colunas Coluna: B. Piropo Publicada em 23/01/2006 Autor: B.Piropo Na coluna anterior, < http://www.forumpcs.com.br/viewtopic.php?t=146019

Leia mais

Módulo 4. Construindo uma solução OLAP

Módulo 4. Construindo uma solução OLAP Módulo 4. Construindo uma solução OLAP Objetivos Diferenciar as diversas formas de armazenamento Compreender o que é e como definir a porcentagem de agregação Conhecer a possibilidade da utilização de

Leia mais

PROJETO DE REDES www.projetoderedes.com.br

PROJETO DE REDES www.projetoderedes.com.br PROJETO DE REDES www.projetoderedes.com.br Curso de Tecnologia em Redes de Computadores Disciplina: Redes I Fundamentos - 1º Período Professor: José Maurício S. Pinheiro AULA 2: Transmissão de Dados 1.

Leia mais