CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são...

50
CIC 111 Análise e Projeto de Análise e Projeto de Algoritmos II Algoritmos II Universidade Federal de Itajubá Prof. Roberto Affonso da Costa Junior

Transcript of CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são...

Page 1: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

CIC 111Análise e Projeto de Análise e Projeto de

Algoritmos IIAlgoritmos II

Universidade Federal de Itajubá

Prof. Roberto Affonso da Costa Junior

Page 2: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

AULA 21AULA 21

– Number theory• Primes and factors• Modular arithmetic• Solving equations• Other results

Page 3: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Number TheoryNumber Theory

A teoria dos números é um ramo da matemática que estuda números inteiros. A teoria dos números é um campo fascinante, porque muitas questões envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista.

Como exemplo, considere a seguinte equação:

x ³+ y3+ z ³=33

Page 4: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Number TheoryNumber Theory

É fácil encontrar três números reais x, y e z que satisfaçam a equação. Por exemplo, podemos escolher

No entanto, é um problema aberto na teoria dos números se existem três inteiros x, y e z que satisfizessem a equação.Neste aula, vamos nos concentrar em conceitos básicos e algoritmos na teoria dos números. A partir de agora, vamos supor que todos os números são inteiros, se não for indicado o contrário.

x=3,y= 3

√3 ,z= 3

√3

Page 5: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Primes and factorsPrimes and factors

Um número a é chamado de fator ou divisor de um número b se a divide b. Se a é um fator de b, escrevemos a | b, e de outra forma nós escrevemos a - b. Por exemplo, os fatores de 24 são 1, 2, 3, 4, 6, 8, 12 e 24.Um número n > 1 é um primo se seus únicos fatores positivos forem 1 e n. Por exemplo, 7, 19 e 41 são primos, mas 35 não é primo, porque 5 * 7 = 35. Para cada número n > 1, existe uma única fatorização

n= p1α1 p2

α2⋯ pnαn ,

Page 6: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Primes and factorsPrimes and factors

onde p1, p

2, … , p

k são primos distintos e α

1, α

2, … , α

k

são números positivos.Por exemplo, a fatoração de 84 é

O número de fatores de um número n é

84=2²∗3¹∗7¹

τ (n)=∏i=1

k

(αi+1)

Page 7: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Primes and factorsPrimes and factors

porque para cada primo pi, existem (α

i + 1) maneiras

de escolher quantas vezes aparece no fator. Por exemplo, o número de fatores de 84 é τ(84) = 3 * 2 * 2 = 12. Os fatores são 1, 2, 3, 4, 6, 7, 12, 14, 21, 28, 42 e 84.

A soma dos fatores de n é

σ (n)=∏i=1

k

(1+ p i+⋯+ piα i)=∏

i=1

k

(p iα i+1

−1

pi−1) ,

Page 8: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Primes and factorsPrimes and factors

onde a última fórmula é baseada na fórmula de progressão geométrica. Por exemplo, a soma dos fatores de 84 é

O produto dos fatores de n é

σ (n)=(23

−12−1 )∗(

32−1

3−1 )∗(72

−17−1 )=7∗4∗8=224.

μ (n)=nτ (n)

2 ,

Page 9: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Primes and factorsPrimes and factors

porque podemos formar τ(n)/2 pares dos fatores, cada um com o produto n. Por exemplo, os fatores de 84 produzem os pares 1 * 84, 2 * 42, 3 * 28, etc., e o produto dos fatores é μ(84) = 846 = 351298031616.

Um número n é chamado de número perfeito se n = σ(n) – n, isto é, n é igual à soma de seus fatores entre 1 e n – 1. Por exemplo, 28 é um número perfeito, porque 28 = 1 + 2 + 4 + 7 + 14.

Page 10: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Number of primesNumber of primes

É fácil mostrar que existe um número infinito de primos. Se o número de primos fosse finito, poderíamos construir um conjunto P = {p

1, p

2, … ,

pn} que conteria todos os primos. Por exemplo, p

1 = 2,

p2 = 3, p

3 = 5 e assim por diante. No entanto, usando

P, poderíamos formar um novo primo

que é maior que todos os elementos em P. Isto é uma contradição, e o número de primos tem que ser infinito.

p1∗p2∗⋯∗pn+1

Page 11: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Density of primesDensity of primes

A densidade de primos significa quantas vezes há primos entre os números. Seja π(n) o número de primos entre 1 e n. Por exemplo, π(10) = 4, porque existem 4 primos entre 1 e 10: 2, 3, 5 e 7.É possível mostrar que

o que significa que os primos são bastante frequentes. Por exemplo, o número de primos entre 1 e 106 é π(106) = 78498 e 106 / ln 106 ≈ 72382.

π (n)≈n

ln (n)

Page 12: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

ConjecturesConjectures

Existem muitas conjecturas envolvendo primos. A maioria das pessoas pensa que as conjecturas são verdadeiras, mas ninguém foi capaz de prová-las. Por exemplo, as seguintes conjecturas são famosas:

Conjectura de Goldbach: Cada inteiro igual a n > 2 pode ser representado como uma soma n = a + b, de modo que tanto a quanto b sejam primos.Conjectura privilegiada dos gêmeos: Existe um número infinito de pares da forma {p, p + 2}, em que p e p + 2 são primos.Conjectura de Legendre: Há sempre um primo entre os números n2 e (n + 1)2, onde n é qualquer inteiro positivo.

Page 13: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Basic algorithmsBasic algorithms

Se um número n não é primo, ele pode ser representado como um produto a * b, onde a ≤ ou b ≤ , então certamente tem um fator entre 2 e

. Usando essa observação, podemos testar se um número é primo e encontrar a fatoração primária de um número p no tempo O(n).

A seguinte função prime verifica se o número dado n é primo. A função tenta dividir n por todos os números entre 2 e , e se nenhum deles divide n, então n é primo.

√n√n

√n

⌊√n⌋⌊√n⌋

⌊√n⌋

Page 14: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Basic algorithmsBasic algorithms

A seguinte função factor constroem um vetor que contém a fatoração de n. A função divide n por seus fatores primos e os adiciona ao vetor. O processo termina quando o número restante n não tem fatores entre 2 e . Se n > 1, é primo e o último fator.

bool prime(int n) { if (n < 2) return false; for (int x = 2; x*x <= n; x++) { if (n%x == 0) return false; } return true;}

⌊√n⌋

Page 15: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Basic algorithmsBasic algorithms

Observe que cada fator primo aparece no vetor quantas vezes ele divide o número. Por exemplo, 24 = 23 * 3, então o resultado da função é [2, 2, 2, 3].

vector<int> factors(int n) { vector<int> f; for (int x = 2; x*x <= n; x++) { while (n%x == 0) { f.push_back(x); n /= x; } } if (n > 1) f.push_back(n); return f;}

Page 16: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Sieve of EratosthenesSieve of Eratosthenes

A peneira de Eratóstenes é um algoritmo de pré-processamento que constrói um vetor usando a verificação eficientemente de um determinado número entre 2 … n se é primo e, se não for, encontra um fator primo do número.

O algoritmo constrói uma peneira de vetor cujas posições 2, 3, … , n são usados. A peneira de valor [k] = 0 significa que k é primo, e a peneira de valor [k] ≠ 0 significa que k não é primo e um de seus fatores primos é peneira [k].

Page 17: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Sieve of EratosthenesSieve of Eratosthenes

O algoritmo percorre os números 2 … n, um por um. Sempre que um novo x é encontrado, o algoritmo registra que os múltiplos de x (2x, 3x, 4x, …). Não são primos, porque o número x os divide.

Por exemplo, se n = 20, o vetor é o seguinte:

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

0 0 2 0 3 0 2 3 5 0 3 0 7 5 2 0 3 0 5

Page 18: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Sieve of EratosthenesSieve of Eratosthenes

O código a seguir implementa a peneira de Eratóstenes. O código assume que cada elemento da peneira é inicialmente zero.

for (int x = 2; x <= n; x++) { if (sieve[x]) continue; for (int u = 2*x; u <= n; u += x) { sieve[u] = x; }}

Page 19: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Sieve of EratosthenesSieve of Eratosthenes

O loop interno do algoritmo é executado n / x vezes para cada valor de x. Assim, um limite superior para o tempo de execução do algoritmo é a soma harmônica

De fato, o algoritmo é mais eficiente, porque o loop interno só será executado se o número x for primo. Pode ser mostrado que o tempo de execução do algoritmo é apenas O(n log log n), uma complexidade muito próxima de O(n).

∑x=2

nnx=n2+n3 +n4 +⋯+

nn=O (n log(n)).

Page 20: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Euclid’s algorithmEuclid’s algorithm

O maior divisor comum dos números a e b, mdc(a, b), é o maior número que divide tanto a como b e o mínimo múltiplo comum de a e b, mmc(a, b), é o menor número que é divisível por ambos a e b. Por exemplo, mdc(24, 36) = 12 e mmc(24, 36) = 72.

O maior divisor comum e o menor múltiplo comum são conectados da seguinte maneira:

mmc (a ,b)=a∗b

mdc (a ,b)

Page 21: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Euclid’s algorithmEuclid’s algorithm

O algoritmo de Euclides fornece uma maneira eficiente de encontrar o maior divisor comum de dois números. O algoritmo é baseado na seguinte fórmula:

Por exemplo,

mdc(a ,b)={ a b=0mdc (b ,amod b) b≠0

mdc (24,36)=mdc(36,24)=mdc(24,12)=mdc(12,0)=12

Page 22: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Euclid’s algorithmEuclid’s algorithm

O algoritmo pode ser implementado da seguinte forma:

Pode ser demonstrado que o algoritmo de Euclides funciona no tempo O(log n), onde n = min(a, b). O pior caso para o algoritmo é o caso quando a e b são números consecutivos de Fibonacci. Por exemplo,

mdc(13,8)=mdc(8,5)=mdc(5,3)

mdc(3,2)=mdc(2,1)=mdc (1,0)=1

int mdc(int a, int b) { if (b == 0) return a; return mdc(b, a%b);}

Page 23: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Euler’s totient functionEuler’s totient function

Os números a e b são coprimos se mdc(a, b) = 1. A função de Euler φ(n) fornece o número de números de coprimo para n entre 1 e n. Por exemplo, φ(12) = 4, porque 1, 5, 7 e 11 são coprimo para 12.

O valor de φ(n) pode ser calculado a partir da fatoração de n usando a fórmula

Por exemplo, φ(12) = 21 * (2 – 1) * 30 * (3 – 1) = 4. Note que φ(n) = n - 1 se n é primo.

φ(n)=∏i=1

k

piαi−1

( pi−1)

Page 24: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Modular arithmeticModular arithmetic

Na aritmética modular, o conjunto de números é limitado de modo que apenas os números 0, 1, 2, … , m – 1 são usados, onde m é uma constante. Cada número x é representado pelo número x mod m: o resto da divisão de x por m. Por exemplo, se m = 17, então 75 é representado por 75 mod 17 = 7.

Page 25: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Modular arithmeticModular arithmeticMuitas vezes podemos pegar os resíduos antes de fazer cálculos. Em particular, as seguintes fórmulas contêm:

(x+ y )mod m=(x mod m+ y mod m)mod m(x−y )mod m=(x mod m− ymod m)mod m(x∗y )mod m=(x mod m∗y mod m)mod m

(xn)mod m=( xmod m)nmod m

Page 26: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Modular exponentiationModular exponentiationMuitas vezes há necessidade de calcular eficientemente o valor de xn mod m. Isso pode ser feito no tempo O(log n) usando a seguinte recursão:

É importante que, no caso de um n par, o valor de xn/2 seja calculado apenas uma vez. Isso garante que a complexidade de tempo do algoritmo seja O(log n), porque n é sempre dividido pela metade quando está igual.

xn={1 n=0

xn2∗x

n2 n é par

xn−1∗x n é impar

Page 27: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Modular exponentiationModular exponentiationA função a seguir calcula o valor de xn mod m:

int modpow(int x, int n, int m) { if (n == 0) return 1%m; int u = modpow(x, n/2, m); u = (u*u)%m; if (n%2 == 1) u = (u*x)%m; return u;}

Page 28: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Fermat’s theorem and Fermat’s theorem and Euler’s theoremEuler’s theorem

O teorema de Fermat afirma que

quando m é primo e x e m são coprimo. Isso também produz

Mais geralmente, o teorema de Euler afirma que

quando x e m são coprimo. O teorema de Fermat segue o teorema de Euler, porque se m é primo, então φ(m) = m - 1.

xm−1mod m=1

xkmod m=xk mod (m−1)mod m.

xφ(m)mod m=1

Page 29: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Modular inverseModular inverseO inverso de x mod m é um número x-1 tal que

Por exemplo, se x = 6 e m = 17, então x–1 = 3, porque 6 * 3 mod 17 = 1.

Usando inversos modulares, podemos dividir números módulo m, porque divisão x corresponde à multiplicação por x-1. Por exemplo, para avaliar o valor de 36/6 mod 17, podemos usar a fórmula 2 * 3 mod 17, porque 36 mod 17 = 2 e 6-1 mod 17 = 3.

xx−1mod m=1

Page 30: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Modular inverseModular inverseNo entanto, um inverso modular nem sempre existe. Por exemplo, se x = 2 e m = 4, a equação

não pode ser resolvido, porque todos os múltiplos de 2 são par e o resto nunca pode ser 1 quando m = 4. Acontece que o valor de x-1 mod m pode ser calculado exatamente quando x e m são coprimo.

Se existe um inverso modular, ele pode ser calculado usando a fórmula

xx−1mod m=1

x−1=xφ (m)−1

Page 31: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Modular inverseModular inverseSe m é primo, a fórmula se torna

Por exemplo,

Essa fórmula nos permite calcular eficientemente as inversões modulares usando o algoritmo de exponenciação modular. A fórmula pode ser derivada usando o teorema de Euler. Primeiro, o inverso modular deve satisfazer a seguinte equação:

6−1mod 17=617−2mod 17=3

x−1=xm−2 .

xx−1mod m=1.

Page 32: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Modular inverseModular inversePor outro lado, de acordo com o teorema de Euler,

então os números x-1 e xφ(m) - 1 são iguais.

xφ(m)mod m=xxφ (m )−1mod m=1,

Page 33: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Computer arithmeticComputer arithmeticNa programação, inteiros sem sinais são representados no módulo 2k, onde k é o número de bits do tipo de dados. Uma consequência comum disso é que um número que se torna muito grande.Por exemplo, em C++, números do tipo unsigned int são representados pelo módulo 232. O código a seguir declara uma variável int sem sinal cujo valor é 123456789. Depois disso, o valor será multiplicado por ele mesmo e o resultado é 1234567892 mod 232 = 2537071545.

unsigned int x = 123456789;cout << x*x << "\n"; // 2537071545

Page 34: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Solving equationsSolving equationsNa matemática, uma equação diofantina é uma equação polinomial que permite a duas ou mais variáveis assumirem apenas valores inteiros. Uma equação linear diofantina é uma equação entre duas somas de monômios de grau zero ou um.

Page 35: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Diophantine equationsDiophantine equationsUma equação diofantina é uma equação da forma

onde a, b e c são constantes e os valores de x e y devem ser encontrados. Cada número na equação tem que ser um inteiro. Por exemplo, uma solução para a equação 5 x + 2 y = 11 é x = 3 e y = - 2.

ax+by=c ,

Page 36: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Diophantine equationsDiophantine equationsPodemos resolver eficientemente uma equação diofantina usando o algoritmo de Euclides. Acontece que podemos estender o algoritmo de Euclides para que ele encontre os números x e y que satisfazem a seguinte equação:

Uma equação diofantina pode ser resolvida se c é divisível pelo mdc(a, b) e, caso contrário, não pode ser resolvido.

ax+by=mdc (a ,b) ,

Page 37: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Diophantine equationsDiophantine equationsComo exemplo, vamos encontrar números x e y que satisfaçam a seguinte equação:

A equação pode ser resolvida, porque mdc(39, 15) = 3 e 3|12. Quando o algoritmo de Euclides calcula o maior divisor comum de 39 e 15, produz a seguinte sequência de chamadas de função:

mdc (39,15)=mdc(15,9)=mdc (9,6)

mdc(6,3)=mdc(3,0)=3

39 x+15 y=12,

Page 38: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Diophantine equationsDiophantine equationsIsso corresponde às seguintes equações:

Usando essas equações, podemos derivar

39∗2+15∗(−5)=3

39−2∗15=915−1∗9=69−1∗6=3

Page 39: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Diophantine equationsDiophantine equationse multiplicando isso por 4, o resultado é

Portanto, uma solução para a equação é x = 8 e y = - 20.

39∗8+15∗(−20)=12

Page 40: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Diophantine equationsDiophantine equationsUma solução para uma equação diofantina não é única, porque podemos formar um número infinito de soluções se soubermos uma solução. Se um par (x, y) é uma solução, então também todos os pares

são soluções, onde k é qualquer inteiro.

(x+ k∗bmdc (a ,b)

, y−k∗a

mdc (a ,b))

Page 41: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Chinese remainder theoremChinese remainder theoremO teorema de resto chinês resolve um grupo de equações da forma

onde todos os pares de m1, m

2, … , m

n são coprimo.

Seja x−1m o inverso de x módulo m, e

x=a1mod m1

x=a2mod m2

⋮x=anmod mn

X k=m1∗m2∗⋯∗mn

mk

Page 42: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Chinese remainder theoremChinese remainder theoremUsando esta notação, uma solução para as equações é

Nesta solução, para cada k = 1, 2, …, n,

Porque

x=a1 X 1 X 1−1m1

+a2 X 2 X 2−1m2

+⋯+an X n X n−1mn

ak X k X k−1mkmod mk=ak ,

X k X k−1mkmod mk=1,

Page 43: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Chinese remainder theoremChinese remainder theoremComo todos os outros termos da soma são divisíveis por m

k, eles não têm efeito sobre o restante, e x mod

mk = a

k.

Por exemplo, uma solução para

Nesta solução, para cada k = 1, 2, …, n,

x=3mod 5x=4mod 7x=2mod 3

3∗21∗1+4∗15∗1+2∗35∗2=263

Page 44: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Chinese remainder theoremChinese remainder theoremDepois de encontrarmos uma solução x, podemos criar um número infinito de outras soluções, porque todos os números da forma

são soluções.

x+m1∗m2∗⋯∗mn

Page 45: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Other resultsOther resultsO teorema de Lagrange afirma que cada inteiro positivo pode ser representado como uma soma de quatro quadrados, ou seja, a2 + b2 + c2 + d2. Por exemplo, o número 123 pode ser representado como a soma 82 + 52 + 52 + 32.

Page 46: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Zeckendorf’s theoremZeckendorf’s theoremO teorema de Zeckendorf afirma que todo inteiro positivo tem uma representação única como uma soma de números de Fibonacci, de modo que nenhum número é igual ou consecutivo a um número de Fibonacci. Por exemplo, o número 74 pode ser representado como a soma 55 + 13 + 5 + 1.

Page 47: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Pythagorean triplesPythagorean triplesUm triplo pitagórico é um triplo (a, b, c) que satisfaz o teorema de Pitágoras a2 + b2 = c2, o que significa que existe um triângulo retângulo com comprimentos laterais a, b e c. Por exemplo, (3, 4, 5) é um triplo pitagórico.

Se (a, b, c) é um triplo pitagórico, todos os triplos da forma (ka, kb, kc) são também triplos pitagóricos onde k > 1. Um triplo pitagórico é primitivo se a, b e c são coprimos, e todos triplos pitagóricos podem ser construídos a partir de triplos primitivos usando um multiplicador k.

Page 48: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Pythagorean triplesPythagorean triplesA fórmula de Euclides pode ser usada para produzir todos os triplos pitagóricos primitivos. Cada um desses triplo é da forma

Onde 0 < m < n, n e m são coprimos e pelo menos um entre n e m é par. Por exemplo, quando m = 1 e n = 2, a fórmula produz o menor triplo pitagórico

(n ²−m ²,2nm ,n ²+m ²) ,

(2²−1²,2∗2∗1,2²+1²)=(3,4,5)

Page 49: CCO 101 PROCESSAMENTO DE DADOS - rcosta62br.unifei.edu.br · envolvendo números inteiros são muito difíceis de resolver, mesmo que pareçam simples à primeira vista. Como exemplo,

Wilson’s theoremWilson’s theoremTeorema de Wilson afirma que um número n é primo exatamente quando

Por exemplo, o número 11 é primo, porque

e o número 12 não é primo, porque

Assim, o teorema de Wilson pode ser usado para descobrir se um número é primo. No entanto, na prática, o teorema não pode ser aplicado a grandes valores de n, porque é difícil calcular valores de (n - 1)! quando n é grande.

(n−1)!mod n=n−1.

10! mod 11=10,

11 ! mod 12=0≠11