Teoria de números/Eficiência do algoritmo de Euclides: diferenças entre revisões

Origem: Wikilivros, livros abertos por um mundo aberto.
[edição não verificada][edição verificada]
Conteúdo apagado Conteúdo adicionado
He7d3r.bot (discussão | contribs)
Correção de typos e formatação geral, typos fixed: substituido → substituído utilizando AWB
 
Linha 6: Linha 6:


Recorde-se que o algoritmo baseia-se na construção da sequência:
Recorde-se que o algoritmo baseia-se na construção da sequência:
:<math>a = r_0 \ge b = r_1 > r_2 > \ldots > r_k > r_{k+1} = 0\,\!</math>
:<math>a = r_0 \ge b = r_1 > r_2 > \ldots > r_k > r_{k+1} = 0</math>
cujos termos verificam as seguintes igualdades:
cujos termos verificam as seguintes igualdades:


{| cellpadding=0px cellspacing=6px
{| cellpadding=0px cellspacing=6px
|-
|-
|align=center width=50px|'''1''' ||align=right| <math>r_0 =\,\!</math> || width=200px | <math>r_1q_0+r_2\,\!</math> || <math>0 \le r_2<r_1\,\!</math>
|align=center width=50px|'''1''' ||align=right| <math>r_0 =</math> || width=200px | <math>r_1q_0+r_2</math> || <math>0 \le r_2<r_1</math>
|-
|-
|align=center|'''2''' ||align=right| <math>r_1 =\,\!</math> || <math>r_2q_1+r_3\,\!</math> || <math>0 \le r_3<r_2\,\!</math>
|align=center|'''2''' ||align=right| <math>r_1 =</math> || <math>r_2q_1+r_3</math> || <math>0 \le r_3<r_2</math>
|-
|-
| ||align=right| <math>\vdots\,\!</math> || ||
| ||align=right| <math>\vdots</math> || ||
|-
|-
|align=center|'''k-1''' ||align=right| <math>r_{k-2} =\,\!</math> || <math>r_{k-1}q_{k-2}+r_{k}\,\!</math> || <math>0 \le r_{k}<r_{k-1}\,\!</math>
|align=center|'''k-1''' ||align=right| <math>r_{k-2} =</math> || <math>r_{k-1}q_{k-2}+r_{k}</math> || <math>0 \le r_{k}<r_{k-1}</math>
|-
|-
|align=center|'''k''' ||align=right| <math>r_{k-1} =\,\!</math> || <math>r_{k}q_{k-1}+r_{k+1} = r_{k}q_{k-1}\,\!</math> || pois <math>0 = r_{k+1}<r_{k}\,\!</math>
|align=center|'''k''' ||align=right| <math>r_{k-1} =</math> || <math>r_{k}q_{k-1}+r_{k+1} = r_{k}q_{k-1}</math> || pois <math>0 = r_{k+1}<r_{k}</math>
|}
|}


O algoritmo fornece <math>(a,b) = r_k\,\!</math>, que é o último resto não nulo, obtido em <math>k\,\!</math> passos (divisões).
O algoritmo fornece <math>(a,b) = r_k</math>, que é o último resto não nulo, obtido em <math>k</math> passos (divisões).


Uma observação importante é que o [[Teoria de números/Divisibilidade#Algoritmo da divisão (de Euclides)|resto de uma divisão]] é sempre menor que a metade do dividendo:
Uma observação importante é que o [[Teoria de números/Divisibilidade#Algoritmo da divisão (de Euclides)|resto de uma divisão]] é sempre menor que a metade do dividendo:
:<math>r_0 = r_1q_0+r_2 \ge r_1+r_2 > 2r_2\,\!</math>
:<math>r_0 = r_1q_0+r_2 \ge r_1+r_2 > 2r_2</math>
Sendo a primeira desigualdade válida porque <math>q_0\ge 1\,\!</math> e a segunda porque <math>r_1>r_2\,\!</math>. Deste modo, tem-se
Sendo a primeira desigualdade válida porque <math>q_0\ge 1</math> e a segunda porque <math>r_1>r_2</math>. Deste modo, tem-se
:<math>r_0 > 2r_2\,\!</math>
:<math>r_0 > 2r_2</math>
:<math>r_1 > 2r_3\,\!</math>
:<math>r_1 > 2r_3</math>
:<math>r_2 > 2r_4\,\!</math>
:<math>r_2 > 2r_4</math>
:<math>r_3 > 2r_5\,\!</math>
:<math>r_3 > 2r_5</math>
e em geral
e em geral
:<math>r_{k}>2r_{k+2}\,\!</math>, para cada <math>k\ge 0\,\!</math>.
:<math>r_{k}>2r_{k+2}</math>, para cada <math>k\ge 0</math>.


Assim, comparando os termos cujos índices são pares, segue:
Assim, comparando os termos cujos índices são pares, segue:
:<math>r_{0}<a/2\,\!</math>
:<math>r_{0}<a/2</math>


:<math>r_{2}<r_{0}/2<a/4\,\!</math>
:<math>r_{2}<r_{0}/2<a/4</math>


:<math>r_{4}<r_{2}/2<r_{0}/4<a/8\,\!</math>
:<math>r_{4}<r_{2}/2<r_{0}/4<a/8</math>


:<math>\ldots\,\!</math>
:<math>\ldots</math>
{{Wikipedia|Progressão geométrica#Progressão geométrica decrescente}}
{{Wikipedia|Progressão geométrica#Progressão geométrica decrescente}}
Por indução, resulta para cada termo:
Por indução, resulta para cada termo:


:<math>r_{2j}<a/2^{j+1}\,\!</math>
:<math>r_{2j}<a/2^{j+1}</math>


De modo análogo, ao comparar os termos ímpares, e usar novamente indução, segue:
De modo análogo, ao comparar os termos ímpares, e usar novamente indução, segue:
:<math>r_{2j+1}<a/2^{j+1}\,\!</math>
:<math>r_{2j+1}<a/2^{j+1}</math>


Com isso, a sequência dos <math>r_j\,\!</math> decresce ''geometricamente'', pois <math>a\,\!</math> está fixado. O fato de ser uma sequência decrescente já havia sido demonstrado quando se justificou o funcionamento do algoritmo de Euclides. A novidade aqui é a ''velocidade'' com que a sequência decresce. Pelos cálculos anteriores, os restos diminuem, no mínimo, tão rápido quanto os termos da progressão geométrica <math>( a,\frac{a}{2}, \frac{a}{4}, \frac{a}{8}, \frac{a}{16}, \ldots )\,\!</math>.
Com isso, a sequência dos <math>r_j</math> decresce ''geometricamente'', pois <math>a</math> está fixado. O fato de ser uma sequência decrescente já havia sido demonstrado quando se justificou o funcionamento do algoritmo de Euclides. A novidade aqui é a ''velocidade'' com que a sequência decresce. Pelos cálculos anteriores, os restos diminuem, no mínimo, tão rápido quanto os termos da progressão geométrica <math>( a,\frac{a}{2}, \frac{a}{4}, \frac{a}{8}, \frac{a}{16}, \ldots )</math>.


A questão colocada era: ''Quantas divisões são necessárias para que o resto <math>r_{k+1}\,\!</math> seja zero?''
A questão colocada era: ''Quantas divisões são necessárias para que o resto <math>r_{k+1}</math> seja zero?''


Analisando a progressão geométrica dada anteriormente, conclui-se que algum de seus termos é menor do que <math>1\,\!</math>. Nesse caso, o resto correspondente será nulo, e o algoritmo para. Para ser mais exato, como
Analisando a progressão geométrica dada anteriormente, conclui-se que algum de seus termos é menor do que <math>1</math>. Nesse caso, o resto correspondente será nulo, e o algoritmo para. Para ser mais exato, como
:<math>\frac{a}{2^{x}} < 1 \Leftrightarrow a < 2^{x} \Leftrightarrow \log_2 a < x \,\!</math>
:<math>\frac{a}{2^{x}} < 1 \Leftrightarrow a < 2^{x} \Leftrightarrow \log_2 a < x </math>


o menor índice inteiro <math>t\,\!</math> que torna <math>\frac{a}{2^t}\,\!</math> menor que <math>1\,\!</math> é
o menor índice inteiro <math>t</math> que torna <math>\frac{a}{2^t}</math> menor que <math>1</math> é
:<math>t = \lfloor \log_2 a \rfloor + 1\,\!</math>
:<math>t = \lfloor \log_2 a \rfloor + 1</math>


Onde <math>\lfloor \alpha \rfloor\,\!</math> denota o maior inteiro que não supera <math>\alpha\,\!</math> (a [[w:Parte inteira|parte inteira]] de <math>\alpha\,\!</math>).
Onde <math>\lfloor \alpha \rfloor</math> denota o maior inteiro que não supera <math>\alpha</math> (a [[w:Parte inteira|parte inteira]] de <math>\alpha</math>).


Então <math>r_{2t} < \frac{a}{2^{t+1}} < \frac{a}{2^{t}} < 1\,\!</math>, e consequentemente <math>r_{2t} = 0</math>, pois os restos são números inteiros não-negativos.
Então <math>r_{2t} < \frac{a}{2^{t+1}} < \frac{a}{2^{t}} < 1</math>, e consequentemente <math>r_{2t} = 0</math>, pois os restos são números inteiros não-negativos.


Assim, sabendo que o algoritmo para exatamente quando <math>r_{k+1} = 0\,\!</math>, conlui-se que tal índice <math>k+1\,\!</math> não pode ser maior que <math>2t\,\!</math>, em símbolos:
Assim, sabendo que o algoritmo para exatamente quando <math>r_{k+1} = 0</math>, conlui-se que tal índice <math>k+1</math> não pode ser maior que <math>2t</math>, em símbolos:
:<math>k+1 \le 2(\lfloor \log_2 a \rfloor + 1)\,\!</math>
:<math>k+1 \le 2(\lfloor \log_2 a \rfloor + 1)</math>


Para melhor compreender o significado dessa estimativa, considere que <math>a\,\!</math> tem <math>N\,\!</math> dígitos decimais. Então:
Para melhor compreender o significado dessa estimativa, considere que <math>a</math> tem <math>N</math> dígitos decimais. Então:
:<math>10^{N-1}\le a < 10^N\,\!</math>
:<math>10^{N-1}\le a < 10^N</math>
Aplicando o logaritmo em ambos os membros da segunda desigualdade, resulta
Aplicando o logaritmo em ambos os membros da segunda desigualdade, resulta
:<math>\log_2 a < N\cdot\log_2 10\,\!</math>
:<math>\log_2 a < N\cdot\log_2 10</math>


Logo, <math>k+1 \le 2 (\lfloor\log_2 a\rfloor +1)< 2N\cdot\log_2 10 + 2\,\!</math>, que para valores grandes de <math>N\,\!</math> é aproximadamente <math>6,6N\,\!</math>.
Logo, <math>k+1 \le 2 (\lfloor\log_2 a\rfloor +1)< 2N\cdot\log_2 10 + 2</math>, que para valores grandes de <math>N</math> é aproximadamente <math>6,6N</math>.


Embora esta não seja a melhor aproximação para <math>k\,\!</math>, já é bastante útil, pois mostra que o número de etapas cresce linearmente com o número de dígitos de <math>a\,\!</math>.
Embora esta não seja a melhor aproximação para <math>k</math>, já é bastante útil, pois mostra que o número de etapas cresce linearmente com o número de dígitos de <math>a</math>.


=== O pior caso ===
=== O pior caso ===
<!-- Foi mostrado que a sequência dos restos decresce geometricamente, ou seja, além de ser verdade que
<!-- Foi mostrado que a sequência dos restos decresce geometricamente, ou seja, além de ser verdade que
:<math>a \ge b > r_0 > r_1 > \ldots > r_k > r_{k+1} = 0\,\!</math>
:<math>a \ge b > r_0 > r_1 > \ldots > r_k > r_{k+1} = 0</math>
tem-se
tem-se
* <math>r_{2j }<a/2^{j+1}\,\!</math>
* <math>r_{2j }<a/2^{j+1}</math>
* <math>r_{2j+1}<a/2^{j+1}\,\!</math>
* <math>r_{2j+1}<a/2^{j+1}</math>
-->
-->
Para obter uma estimativa mais precisa do número de etapas que o algoritmo de Euclides leva para determinar o MDC de dois números, será considerada a seguinte questão:
Para obter uma estimativa mais precisa do número de etapas que o algoritmo de Euclides leva para determinar o MDC de dois números, será considerada a seguinte questão:


:''Qual é o menor valor de <math>a\,\!</math> para o qual o algoritmo leva <math>n\,\!</math> passos?''
:''Qual é o menor valor de <math>a</math> para o qual o algoritmo leva <math>n</math> passos?''


Veja alguns exemplos utilizando a representação matricial do algoritmo:
Veja alguns exemplos utilizando a representação matricial do algoritmo:


Para <math>n=1\,\!</math>:
Para <math>n=1</math>:
:<math>\begin{bmatrix} a \\ b \end{bmatrix} = \begin{bmatrix} q_0 & 1\\ 1 & 0 \end{bmatrix} \cdot \begin{bmatrix} d \\ 0 \end{bmatrix}\,\!</math>
:<math>\begin{bmatrix} a \\ b \end{bmatrix} = \begin{bmatrix} q_0 & 1\\ 1 & 0 \end{bmatrix} \cdot \begin{bmatrix} d \\ 0 \end{bmatrix}</math>


Para <math>n=2\,\!</math>:
Para <math>n=2</math>:
:<math>\begin{bmatrix} a \\ b \end{bmatrix} = \begin{bmatrix} q_0 & 1\\ 1 & 0 \end{bmatrix} \cdot \begin{bmatrix} q_1 & 1\\ 1 & 0 \end{bmatrix} \cdot \begin{bmatrix} d \\ 0 \end{bmatrix} = \begin{bmatrix} q_0q_1+1 & q_0\\ q_1 & 1 \end{bmatrix} \cdot \begin{bmatrix} d \\ 0 \end{bmatrix}\,\!</math>
:<math>\begin{bmatrix} a \\ b \end{bmatrix} = \begin{bmatrix} q_0 & 1\\ 1 & 0 \end{bmatrix} \cdot \begin{bmatrix} q_1 & 1\\ 1 & 0 \end{bmatrix} \cdot \begin{bmatrix} d \\ 0 \end{bmatrix} = \begin{bmatrix} q_0q_1+1 & q_0\\ q_1 & 1 \end{bmatrix} \cdot \begin{bmatrix} d \\ 0 \end{bmatrix}</math>


Para <math>n=3\,\!</math>:
Para <math>n=3</math>:
:<math>\begin{bmatrix} a \\ b \end{bmatrix} = \begin{bmatrix} q_0q_1+1 & q_0\\ q_1 & 1 \end{bmatrix} \cdot \begin{bmatrix} q_2 & 1\\ 1 & 0 \end{bmatrix} \cdot \begin{bmatrix} d \\ 0 \end{bmatrix} = \begin{bmatrix} q_0q_1q_2+q_0+q_2 & q_0q_1+1\\ q_1 & 1 \end{bmatrix} \begin{bmatrix} d \\ 0 \end{bmatrix}\,\!</math>
:<math>\begin{bmatrix} a \\ b \end{bmatrix} = \begin{bmatrix} q_0q_1+1 & q_0\\ q_1 & 1 \end{bmatrix} \cdot \begin{bmatrix} q_2 & 1\\ 1 & 0 \end{bmatrix} \cdot \begin{bmatrix} d \\ 0 \end{bmatrix} = \begin{bmatrix} q_0q_1q_2+q_0+q_2 & q_0q_1+1\\ q_1 & 1 \end{bmatrix} \begin{bmatrix} d \\ 0 \end{bmatrix}</math>


É fácil perceber que <math>a\,\!</math> é mínimo quando os valores <math>q_0,\ldots, q_{k-1} \,\!</math> forem todos iguais a <math>1\,\!</math>, cada entrada da matriz é um polinômio nas variáveis <math>q_j\,\!</math> (que são positivas), e cujos coeficiêntes são <math>1\,\!</math> (se puder, acrescente uma justificativa mais formal).
É fácil perceber que <math>a</math> é mínimo quando os valores <math>q_0,\ldots, q_{k-1} </math> forem todos iguais a <math>1</math>, cada entrada da matriz é um polinômio nas variáveis <math>q_j</math> (que são positivas), e cujos coeficiêntes são <math>1</math> (se puder, acrescente uma justificativa mais formal).


Se cada quociente for substituído por <math>1\,\!</math> na fórmula de recorrência
Se cada quociente for substituído por <math>1</math> na fórmula de recorrência
:<math>r_{j-1} = r_jq_{j-1} + r_{j+1}\,\!</math>
:<math>r_{j-1} = r_jq_{j-1} + r_{j+1}</math>
Esta passará a ser:
Esta passará a ser:
:<math>r_{j-1} = r_j + r_{j+1}\,\!</math>
:<math>r_{j-1} = r_j + r_{j+1}</math>
Que vale para <math>j\,\!</math> satisfazendo <math>1\le j\le k\,\!</math>.
Que vale para <math>j</math> satisfazendo <math>1\le j\le k</math>.


A nova relação lembra a fórmula que define a [[w:Sequência de Fibonacci|sequência de Fibonacci]], embora esteja "ao contrário".
A nova relação lembra a fórmula que define a [[w:Sequência de Fibonacci|sequência de Fibonacci]], embora esteja "ao contrário".
Linha 112: Linha 112:


A sequência de fibonacci é definida pelas seguintes equações:
A sequência de fibonacci é definida pelas seguintes equações:
* <math>F_0 = 0\,\!</math>
* <math>F_0 = 0</math>
* <math>F_1 = 1\,\!</math>
* <math>F_1 = 1</math>
* <math>F_k = F_{k-1} + F_{k-2}\,\!</math>
* <math>F_k = F_{k-1} + F_{k-2}</math>


Assim, seus primeiros termos são: <math>0, 1, 1, 2, 3, 5, 8, 13, 21, 34, \ldots\,\!</math>
Assim, seus primeiros termos são: <math>0, 1, 1, 2, 3, 5, 8, 13, 21, 34, \ldots</math>


Também é possível demonstrar que é válida a [[w:Fórmula de Binet|fórmula de Binet]]:
Também é possível demonstrar que é válida a [[w:Fórmula de Binet|fórmula de Binet]]:
:<math>F_n = \frac{\varphi ^n - \hat{\varphi}^n}{\sqrt{5}}\,\!</math>
:<math>F_n = \frac{\varphi ^n - \hat{\varphi}^n}{\sqrt{5}}</math>


onde:
onde:
* <math>\varphi = \frac{1 + \sqrt{5}}{2} \approx 1.618\,\!</math>, que é conhecido como o [[w:número de ouro|número de ouro]];
* <math>\varphi = \frac{1 + \sqrt{5}}{2} \approx 1.618</math>, que é conhecido como o [[w:número de ouro|número de ouro]];
* <math>\hat{\varphi} = \frac{1 - \sqrt{5}}{2} = \approx -0.618\,\!</math>
* <math>\hat{\varphi} = \frac{1 - \sqrt{5}}{2} = \approx -0.618</math>
}}
}}


{{Tarefa|Conferir se o expoente k+1 está correto ou se deveria ser k, na próxima equação}}
{{Tarefa|Conferir se o expoente k+1 está correto ou se deveria ser k, na próxima equação}}
Matricialmente, as condições <math>q_0 = 1,\ldots, q_{k-1} = 1\,\!</math> produzem as seguintes igualdades:
Matricialmente, as condições <math>q_0 = 1,\ldots, q_{k-1} = 1</math> produzem as seguintes igualdades:
:<math>\begin{bmatrix} a \\ b \end{bmatrix} = \overbrace{ \begin{bmatrix} \mathbf{1} & 1\\ 1 & 0 \end{bmatrix}\cdot \begin{bmatrix} \mathbf{1} & 1\\ 1 & 0 \end{bmatrix}\cdot \ldots \cdot \begin{bmatrix} \mathbf{1} & 1\\ 1 & 0 \end{bmatrix} } \cdot \begin{bmatrix} d \\ 0 \end{bmatrix} = \begin{bmatrix} \mathbf{1} & 1\\ 1 & 0 \end{bmatrix}^{k+1} \cdot \begin{bmatrix} d \\ 0 \end{bmatrix}</math>, sendo que <math>d=(a,b)\,\!</math>.
:<math>\begin{bmatrix} a \\ b \end{bmatrix} = \overbrace{ \begin{bmatrix} \mathbf{1} & 1\\ 1 & 0 \end{bmatrix}\cdot \begin{bmatrix} \mathbf{1} & 1\\ 1 & 0 \end{bmatrix}\cdot \ldots \cdot \begin{bmatrix} \mathbf{1} & 1\\ 1 & 0 \end{bmatrix} } \cdot \begin{bmatrix} d \\ 0 \end{bmatrix} = \begin{bmatrix} \mathbf{1} & 1\\ 1 & 0 \end{bmatrix}^{k+1} \cdot \begin{bmatrix} d \\ 0 \end{bmatrix}</math>, sendo que <math>d=(a,b)</math>.


Com um simples uso do [[w:Indução matemática|princípio de indução finita]], consegue-se:
Com um simples uso do [[w:Indução matemática|princípio de indução finita]], consegue-se:
:<math>\begin{bmatrix} \mathbf{1} & 1\\ 1 & 0 \end{bmatrix}^n = \begin{bmatrix} F_{n+1} & F_{n}\\ F_{n} & F_{n-1} \end{bmatrix}\,\!</math>, desde que <math>n\ge 1\,\!</math>.
:<math>\begin{bmatrix} \mathbf{1} & 1\\ 1 & 0 \end{bmatrix}^n = \begin{bmatrix} F_{n+1} & F_{n}\\ F_{n} & F_{n-1} \end{bmatrix}</math>, desde que <math>n\ge 1</math>.


Deste modo,
Deste modo,
:<math>\begin{bmatrix} a \\ b \end{bmatrix} = \begin{bmatrix} F_{k+2} & F_{k+1}\\ F_{k+1} & F_{k} \end{bmatrix} \cdot \begin{bmatrix} d \\ 0 \end{bmatrix} = \begin{bmatrix} d\cdot F_{k+2} \\ d\cdot F_{k+1} \end{bmatrix}</math>
:<math>\begin{bmatrix} a \\ b \end{bmatrix} = \begin{bmatrix} F_{k+2} & F_{k+1}\\ F_{k+1} & F_{k} \end{bmatrix} \cdot \begin{bmatrix} d \\ 0 \end{bmatrix} = \begin{bmatrix} d\cdot F_{k+2} \\ d\cdot F_{k+1} \end{bmatrix}</math>


Como <math>d=(a,b)\ge 1\,\!</math>, segue que
Como <math>d=(a,b)\ge 1</math>, segue que
* <math>a\ge F_{k+2}\,\!</math>
* <math>a\ge F_{k+2}</math>
* <math>b\ge F_{k+1}\,\!</math>
* <math>b\ge F_{k+1}</math>


{{Teorema
{{Teorema
|Dado <math>n\ge 1\,\!</math>, sejam <math>a\,\!</math> e <math>b\,\!</math> os <u>menores números</u> tais que o algoritmo de Euclides aplicado a <math>a\,\!</math> e <math>b\,\!</math> leva exatamente <math>n\,\!</math> passos, então <math>a=F_{n+2}\,\!</math> e <math>b=F_{n+1}\,\!</math>.
|Dado <math>n\ge 1</math>, sejam <math>a</math> e <math>b</math> os <u>menores números</u> tais que o algoritmo de Euclides aplicado a <math>a</math> e <math>b</math> leva exatamente <math>n</math> passos, então <math>a=F_{n+2}</math> e <math>b=F_{n+1}</math>.
}}
}}


==== Exemplificando ====
==== Exemplificando ====


Para determinar o valor de <math>(F_7, F_6) = (13, 8)\,\!</math>, seria necessário efetuar cinco divisões:
Para determinar o valor de <math>(F_7, F_6) = (13, 8)</math>, seria necessário efetuar cinco divisões:
:{|
:{|
|-
|-
|align=right| <math>13 = 8\cdot1 + 5\,\!</math>
|align=right| <math>13 = 8\cdot1 + 5</math>
|-
|-
|align=right| <math>8 = 5\cdot1 + 3\,\!</math>
|align=right| <math>8 = 5\cdot1 + 3</math>
|-
|-
|align=right| <math>5 = 3\cdot1 + 2\,\!</math>
|align=right| <math>5 = 3\cdot1 + 2</math>
|-
|-
|align=right| <math>3 = 2\cdot1 + \mathbf{1}\,\!</math>
|align=right| <math>3 = 2\cdot1 + \mathbf{1}</math>
|-
|-
|align=right| <math>2 = \mathbf{1}\cdot2 + 0\,\!</math>
|align=right| <math>2 = \mathbf{1}\cdot2 + 0</math>
|}
|}
Logo, <math>(13,8) = 1\,\!</math>. Aproveitando este exemplo, observe que:
Logo, <math>(13,8) = 1</math>. Aproveitando este exemplo, observe que:
:<math>\begin{bmatrix} 13 \\ 8 \end{bmatrix} = \begin{bmatrix} 13 & 8\\ 8 & 5 \end{bmatrix} \cdot \begin{bmatrix} 1 \\ 0 \end{bmatrix} = \begin{bmatrix} F_{5+2} & F_{5+1}\\ F_{5+1} & F_5 \end{bmatrix} \cdot \begin{bmatrix} 1 \\ 0 \end{bmatrix} = \begin{bmatrix} 1 & 1\\ 1 & 0 \end{bmatrix}^{5+1} \cdot \begin{bmatrix} 1 \\ 0 \end{bmatrix}\,\!</math>
:<math>\begin{bmatrix} 13 \\ 8 \end{bmatrix} = \begin{bmatrix} 13 & 8\\ 8 & 5 \end{bmatrix} \cdot \begin{bmatrix} 1 \\ 0 \end{bmatrix} = \begin{bmatrix} F_{5+2} & F_{5+1}\\ F_{5+1} & F_5 \end{bmatrix} \cdot \begin{bmatrix} 1 \\ 0 \end{bmatrix} = \begin{bmatrix} 1 & 1\\ 1 & 0 \end{bmatrix}^{5+1} \cdot \begin{bmatrix} 1 \\ 0 \end{bmatrix}</math>


No entanto, se qualquer dos números for menor, o algoritmo requer menos etapas. Por exemplo, ao determinar <math>(13, 7)\,\!</math> tem-se:
No entanto, se qualquer dos números for menor, o algoritmo requer menos etapas. Por exemplo, ao determinar <math>(13, 7)</math> tem-se:
:{|
:{|
|-
|-
|align=right| <math>13 = 7\cdot1 + 6\,\!</math>
|align=right| <math>13 = 7\cdot1 + 6</math>
|-
|-
|align=right| <math>7 = 6\cdot1 + \mathbf{1}\,\!</math>
|align=right| <math>7 = 6\cdot1 + \mathbf{1}</math>
|-
|-
|align=right| <math>6 = \mathbf{1}\cdot6 + 0\,\!</math>
|align=right| <math>6 = \mathbf{1}\cdot6 + 0</math>
|}
|}
Donde, <math>(13,7) = 1\,\!</math>.
Donde, <math>(13,7) = 1</math>.


Já o cálculo de <math>(12, 8)\,\!</math> é ainda mais simples:
Já o cálculo de <math>(12, 8)</math> é ainda mais simples:
:{|
:{|
|-
|-
|align=right| <math>12 = 8\cdot1 + \mathbf{4}\,\!</math>
|align=right| <math>12 = 8\cdot1 + \mathbf{4}</math>
|-
|-
|align=right| <math>8 = \mathbf{4}\cdot2 + 0\,\!</math>
|align=right| <math>8 = \mathbf{4}\cdot2 + 0</math>
|}
|}
Portanto, <math>(12,8) = 4\,\!</math>.
Portanto, <math>(12,8) = 4</math>.


== Melhorando as estimativas ==
== Melhorando as estimativas ==
Linha 187: Linha 187:
=== Teorema de Lamé ===
=== Teorema de Lamé ===
{{Teorema
{{Teorema
|O número de passos (de divisões) no algoritmo de Euclides com entradas <math>u\,\!</math> e <math>v\,\!</math> é limitado superiormente por <math>5\,\!</math> vezes a quantidade de dígitos decimais em <math>min(u,v)\,\!</math>.
|O número de passos (de divisões) no algoritmo de Euclides com entradas <math>u</math> e <math>v</math> é limitado superiormente por <math>5</math> vezes a quantidade de dígitos decimais em <math>min(u,v)</math>.
}}
}}


Linha 197: Linha 197:
{{tarefa|Incluir breve biografia sobre Lamé.}}
{{tarefa|Incluir breve biografia sobre Lamé.}}
Para demonstrar o [[w:teorema de Lamé|teorema de Lamé]], é importante ter em mente algumas propriedades relacionadas a [[w:sequência de Fibonacci|sequência de Fibonacci]] e ao [[w:Proporção áurea|número de ouro]]:
Para demonstrar o [[w:teorema de Lamé|teorema de Lamé]], é importante ter em mente algumas propriedades relacionadas a [[w:sequência de Fibonacci|sequência de Fibonacci]] e ao [[w:Proporção áurea|número de ouro]]:
:<math>\varphi = \frac{1 + \sqrt{5}}{2} \approx 1.618\,\!</math>
:<math>\varphi = \frac{1 + \sqrt{5}}{2} \approx 1.618</math>


Tem-se:
Tem-se:
* <math>\varphi^2 = \varphi + 1\,\!</math>
* <math>\varphi^2 = \varphi + 1</math>
{{Demonstração|A verificação é direta, exigindo cálculos bastante simples.}}
{{Demonstração|A verificação é direta, exigindo cálculos bastante simples.}}


* <math>F_n = \frac{\varphi^n}{\sqrt{5}}\,\!</math>, arredondado para o inteiro mais próximo.
* <math>F_n = \frac{\varphi^n}{\sqrt{5}}</math>, arredondado para o inteiro mais próximo.
{{Demonstração
{{Demonstração
|Utilizando a fórmula de Binet, basta observar que o módulo de <math>\hat{\varphi}\,\!</math> é menor que <math>1\,\!</math>, e consequentemente, quando <math>n \to \infty\,\!</math>, tem-se <math>\hat{\varphi}^n \to 0\,\!</math>
|Utilizando a fórmula de Binet, basta observar que o módulo de <math>\hat{\varphi}</math> é menor que <math>1</math>, e consequentemente, quando <math>n \to \infty</math>, tem-se <math>\hat{\varphi}^n \to 0</math>
}}
}}


* <math>F_n \ge \varphi^{n-1}\,\!</math>
* <math>F_n \ge \varphi^{n-1}</math>
{{Demonstração
{{Demonstração
|A justificativa será dada por indução:
|A justificativa será dada por indução:
# <math>F_1 = 1 \ge 1 = \varphi^0\,\!</math>
# <math>F_1 = 1 \ge 1 = \varphi^0</math>
# Se for verdade que <math>F_n \ge \varphi^{n-1}\,\!</math>, então:
# Se for verdade que <math>F_n \ge \varphi^{n-1}</math>, então:
:<math>F_{n+1} = F_{n}+F_{n-1} \ge \varphi^{n-1} + \varphi^{n-2} = \varphi^{n-2}(\varphi + 1) = \varphi^{n-2}\varphi^2 = \varphi^{n}\,\!</math>
:<math>F_{n+1} = F_{n}+F_{n-1} \ge \varphi^{n-1} + \varphi^{n-2} = \varphi^{n-2}(\varphi + 1) = \varphi^{n-2}\varphi^2 = \varphi^{n}</math>
}}
}}


* <math>\log \varphi < \frac{1}{5}\,\!</math>
* <math>\log \varphi < \frac{1}{5}</math>
{{Demonstração
{{Demonstração
|De fato, valem as seguintes equivalências:
|De fato, valem as seguintes equivalências:
<math>\log \varphi < \frac{1}{5} \Leftrightarrow 5\log \varphi < 1 \Leftrightarrow \log \varphi^5 < 1 \,\!</math>
<math>\log \varphi < \frac{1}{5} \Leftrightarrow 5\log \varphi < 1 \Leftrightarrow \log \varphi^5 < 1 </math>


Mas <math>\varphi^5 =5\varphi + 3\,\!</math> (verifique a partir de <math>\varphi^2 = \varphi + 1\,\!</math>), e <math>\varphi > \frac{8}{5} \,\!</math> pois
Mas <math>\varphi^5 =5\varphi + 3</math> (verifique a partir de <math>\varphi^2 = \varphi + 1</math>), e <math>\varphi > \frac{8}{5} </math> pois
:<math>\varphi > \frac{8}{5} \Leftrightarrow \frac{1 + \sqrt{5}}{2} > \frac{8}{5} \Leftrightarrow 5(1 + \sqrt{5}) > 16 \Leftrightarrow 5\sqrt{5} > 11 \Leftrightarrow 125 = 25 \cdot 5 > 121\,\!</math>
:<math>\varphi > \frac{8}{5} \Leftrightarrow \frac{1 + \sqrt{5}}{2} > \frac{8}{5} \Leftrightarrow 5(1 + \sqrt{5}) > 16 \Leftrightarrow 5\sqrt{5} > 11 \Leftrightarrow 125 = 25 \cdot 5 > 121</math>


Sendo que esta última desigualdade é verdadeira.
Sendo que esta última desigualdade é verdadeira.
}}
}}


Como foi visto anteriormente, quando <math>(a,b)\,\!</math> é exige exatamente <math>n\,\!</math> passos, é tem-se <math>a\ge F_n+2\,\!</math> e <math>b\ge F_n+1\,\!</math>. Logo,
Como foi visto anteriormente, quando <math>(a,b)</math> é exige exatamente <math>n</math> passos, é tem-se <math>a\ge F_n+2</math> e <math>b\ge F_n+1</math>. Logo,
:<math>a\ge F_n+2 \ge \varphi^{n+1}\,\!</math>
:<math>a\ge F_n+2 \ge \varphi^{n+1}</math>
Aplicando o logaritmo em ambos os menbros, segue:
Aplicando o logaritmo em ambos os menbros, segue:
:<math>(n+1)\log \varphi \le \log a\,\!</math>
:<math>(n+1)\log \varphi \le \log a</math>
ou seja
ou seja
:<math>n\le \frac{\log a}{\log \varphi} = \log_{\varphi}a\,\!</math>
:<math>n\le \frac{\log a}{\log \varphi} = \log_{\varphi}a</math>


Mas <math>\frac{1}{\log \varphi} < 5\,\!</math>, então:
Mas <math>\frac{1}{\log \varphi} < 5</math>, então:
:<math>n\le \frac{1}{\log \varphi}\cdot \log a < 5\log_{\varphi}a < 5N\,\!</math>, onde <math>N\,\!</math> é o número de dígitos de <math>a\,\!</math>
:<math>n\le \frac{1}{\log \varphi}\cdot \log a < 5\log_{\varphi}a < 5N</math>, onde <math>N</math> é o número de dígitos de <math>a</math>


== Demonstração da fórmula de Binet ==
== Demonstração da fórmula de Binet ==


Nesta seção, será deduzida a [[w:Fórmula de Binet|fórmula de Binet]]:
Nesta seção, será deduzida a [[w:Fórmula de Binet|fórmula de Binet]]:
:<math>F_n = \frac{1}{\sqrt{5}}\left ( \left ( \frac{1+\sqrt{5}}{2} \right )^n - \left ( \frac{1-\sqrt{5}}{2} \right )^n \right ) = \frac{\varphi ^n - \hat{\varphi}^n}{\sqrt{5}}\,\!</math>
:<math>F_n = \frac{1}{\sqrt{5}}\left ( \left ( \frac{1+\sqrt{5}}{2} \right )^n - \left ( \frac{1-\sqrt{5}}{2} \right )^n \right ) = \frac{\varphi ^n - \hat{\varphi}^n}{\sqrt{5}}</math>


onde <math>\varphi = \frac{1 + \sqrt{5}}{2}\,\!</math> e <math>\hat{\varphi} = \frac{1 - \sqrt{5}}{2}\,\!</math>.
onde <math>\varphi = \frac{1 + \sqrt{5}}{2}</math> e <math>\hat{\varphi} = \frac{1 - \sqrt{5}}{2}</math>.


A principal razão para se utilizar está fórmula, em vez da definição recursiva da sequência de Fibonacci, é que ela permite a obtenção de um termo da sequência <u>sem precisar calcular os anteriores</u>.
A principal razão para se utilizar está fórmula, em vez da definição recursiva da sequência de Fibonacci, é que ela permite a obtenção de um termo da sequência <u>sem precisar calcular os anteriores</u>.
{{Demonstração
{{Demonstração
|A relação entre os termos da sequência pode ser descrita matricialmente da seguinte forma:
|A relação entre os termos da sequência pode ser descrita matricialmente da seguinte forma:
:<math>\begin{bmatrix} F_{n+1} \\ F_{n} \end{bmatrix} = \begin{bmatrix} 1 & 1\\ 1 & 0 \end{bmatrix} \cdot \begin{bmatrix} F_{n} \\ F_{n-1} \end{bmatrix}\,\!</math>
:<math>\begin{bmatrix} F_{n+1} \\ F_{n} \end{bmatrix} = \begin{bmatrix} 1 & 1\\ 1 & 0 \end{bmatrix} \cdot \begin{bmatrix} F_{n} \\ F_{n-1} \end{bmatrix}</math>
Para simplificar, será adotada a seguinte notação:
Para simplificar, será adotada a seguinte notação:
:<math>Q = \begin{bmatrix} 1 & 1\\ 1 & 0 \end{bmatrix}\,\!</math>
:<math>Q = \begin{bmatrix} 1 & 1\\ 1 & 0 \end{bmatrix}</math>


A partir de um simples argumento de indução (veja [[#Exercícios|exercício 1]]), obtem-se:
A partir de um simples argumento de indução (veja [[#Exercícios|exercício 1]]), obtem-se:
:<math>\begin{bmatrix} F_{n+1} \\ F_{n} \end{bmatrix} = Q^n \cdot \begin{bmatrix} F_{1} \\ F_{0} \end{bmatrix}\,\!</math>
:<math>\begin{bmatrix} F_{n+1} \\ F_{n} \end{bmatrix} = Q^n \cdot \begin{bmatrix} F_{1} \\ F_{0} \end{bmatrix}</math>


Neste ponto, recorre-se à [[Álgebra linear]], para obter um jeito simples de calcular o produto acima.
Neste ponto, recorre-se à [[Álgebra linear]], para obter um jeito simples de calcular o produto acima.
Se puder ser escrito
Se puder ser escrito
:<math>\begin{bmatrix} 1 \\ 0 \end{bmatrix} = \alpha v+\alpha'v'\,\!</math>, com <math>v\,\!</math> e <math>v'\,\!</math> sendo auto-vetores de <math>Q\,\!</math>, ou seja, vetores não nulos tais que <math>Qv = \lambda_1 v\,\!</math> e <math>Qv' = \lambda_2 v'\,\!</math>, será possível obter:
:<math>\begin{bmatrix} 1 \\ 0 \end{bmatrix} = \alpha v+\alpha'v'</math>, com <math>v</math> e <math>v'</math> sendo auto-vetores de <math>Q</math>, ou seja, vetores não nulos tais que <math>Qv = \lambda_1 v</math> e <math>Qv' = \lambda_2 v'</math>, será possível obter:
:<math>\begin{bmatrix} F_{n+1} \\ F_{n} \end{bmatrix} = Q^n(\alpha v + \alpha' v') = \alpha (Q^n v) + \alpha' (Q^n v') = \alpha (\lambda_1^n v) + \alpha' (\lambda_2^n v')\,\!</math>
:<math>\begin{bmatrix} F_{n+1} \\ F_{n} \end{bmatrix} = Q^n(\alpha v + \alpha' v') = \alpha (Q^n v) + \alpha' (Q^n v') = \alpha (\lambda_1^n v) + \alpha' (\lambda_2^n v')</math>
A partir daí será bastante simples conseguir a fórmula explicita para <math>F_n\,\!</math> (a segunda componente do vetor à esquerda), pois <math>v, v', \alpha, \alpha', \lambda_1, \lambda_2\,\!</math> seriam constantes.
A partir daí será bastante simples conseguir a fórmula explicita para <math>F_n</math> (a segunda componente do vetor à esquerda), pois <math>v, v', \alpha, \alpha', \lambda_1, \lambda_2</math> seriam constantes.


É, portanto, necessário determinar essas constantes, a começar pelos auto-valores de <math>Q\,\!</math>. Tem-se:
É, portanto, necessário determinar essas constantes, a começar pelos auto-valores de <math>Q</math>. Tem-se:
:<math>\begin{bmatrix} 1 & 1\\ 1 & 0 \end{bmatrix} \cdot \begin{bmatrix} x \\ y \end{bmatrix} = \lambda \begin{bmatrix} x \\ y \end{bmatrix} \Leftrightarrow \left\{\begin{matrix}
:<math>\begin{bmatrix} 1 & 1\\ 1 & 0 \end{bmatrix} \cdot \begin{bmatrix} x \\ y \end{bmatrix} = \lambda \begin{bmatrix} x \\ y \end{bmatrix} \Leftrightarrow \left\{\begin{matrix}
x & + & y & = & \lambda x\\
x & + & y & = & \lambda x\\
x & & & = & \lambda y
x & & & = & \lambda y
\end{matrix}\right.\,\!</math>
\end{matrix}\right.</math>


Logo <math>\lambda y + y = \lambda^2 y\,\!</math>, ou seja, <math>(\lambda^2 -\lambda - 1)\cdot y = 0\,\!</math>
Logo <math>\lambda y + y = \lambda^2 y</math>, ou seja, <math>(\lambda^2 -\lambda - 1)\cdot y = 0</math>
Assim, <math>y=0\,\!</math> (que implica <math>x=0\,\!</math>) ou <math>\lambda^2 -\lambda - 1 = 0\,\!</math>. O primeiro caso não é de interesse, pois auto-vetores não são nulos.
Assim, <math>y=0</math> (que implica <math>x=0</math>) ou <math>\lambda^2 -\lambda - 1 = 0</math>. O primeiro caso não é de interesse, pois auto-vetores não são nulos.


Note que a equação acima possui duas raízes:
Note que a equação acima possui duas raízes:
* <math>\lambda_1 = \varphi = \frac{1 + \sqrt{5}}{2}\,\!</math>
* <math>\lambda_1 = \varphi = \frac{1 + \sqrt{5}}{2}</math>
* <math>\lambda_2 = \hat{\varphi} = \frac{1 - \sqrt{5}}{2}\,\!</math>
* <math>\lambda_2 = \hat{\varphi} = \frac{1 - \sqrt{5}}{2}</math>


Além disso, se <math>\lambda\,\!</math> é raiz da equação, então para cada <math>y\not = 0\,\!</math>, o vetor
Além disso, se <math>\lambda</math> é raiz da equação, então para cada <math>y\not = 0</math>, o vetor
:<math>\begin{bmatrix} \lambda y \\ y \end{bmatrix} = y \begin{bmatrix} \lambda \\ 1 \end{bmatrix}\,\!</math> é um auto-vetor de <math>Q\,\!</math>.
:<math>\begin{bmatrix} \lambda y \\ y \end{bmatrix} = y \begin{bmatrix} \lambda \\ 1 \end{bmatrix}</math> é um auto-vetor de <math>Q</math>.


Em particular, se <math>y=1\,\!</math>, os auto-vetores correspondentes a cada raiz da equação quadrática são:
Em particular, se <math>y=1</math>, os auto-vetores correspondentes a cada raiz da equação quadrática são:
* <math>v = \begin{bmatrix} \varphi \\ 1 \end{bmatrix}\,\!</math>
* <math>v = \begin{bmatrix} \varphi \\ 1 \end{bmatrix}</math>
* <math>v'= \begin{bmatrix} \hat{\varphi} \\ 1 \end{bmatrix}\,\!</math>
* <math>v'= \begin{bmatrix} \hat{\varphi} \\ 1 \end{bmatrix}</math>


De modo que <math>Qv = \varphi v\,\!</math> e <math>Qv' = \hat{\varphi} v'\,\!</math>
De modo que <math>Qv = \varphi v</math> e <math>Qv' = \hat{\varphi} v'</math>


Resta escrever <math>\begin{bmatrix} 1 \\ 0 \end{bmatrix} = \alpha v+\alpha'v'\,\!</math> conforme se pretendia. Isso é fácil, já que são conhecidos <math>v = \begin{bmatrix} \varphi \\ 1 \end{bmatrix}\,\!</math> e <math>v'= \begin{bmatrix} \hat{\varphi} \\ 1 \end{bmatrix}\,\!</math>:
Resta escrever <math>\begin{bmatrix} 1 \\ 0 \end{bmatrix} = \alpha v+\alpha'v'</math> conforme se pretendia. Isso é fácil, já que são conhecidos <math>v = \begin{bmatrix} \varphi \\ 1 \end{bmatrix}</math> e <math>v'= \begin{bmatrix} \hat{\varphi} \\ 1 \end{bmatrix}</math>:
:<math>\left\{\begin{matrix}
:<math>\left\{\begin{matrix}
1 & = & \alpha \varphi & + & \alpha' \hat{\varphi}\\
1 & = & \alpha \varphi & + & \alpha' \hat{\varphi}\\
0 & = & \alpha & + & \alpha'
0 & = & \alpha & + & \alpha'
\end{matrix}\right.\,\!</math>
\end{matrix}\right.</math>


Da segunda equação, segue que <math>\alpha' = -\alpha\,\!</math>. Substituindo esse valor na primeira equação, resulta:
Da segunda equação, segue que <math>\alpha' = -\alpha</math>. Substituindo esse valor na primeira equação, resulta:
<math>1 = \alpha \varphi - \alpha' \hat{\varphi} = \alpha (\varphi - \hat{\varphi})\,\!</math>
<math>1 = \alpha \varphi - \alpha' \hat{\varphi} = \alpha (\varphi - \hat{\varphi})</math>


Como <math>\hat{\varphi} = 1 - \varphi\,\!</math> (verifique!), tem-se <math>1 = \alpha (\varphi - 1 + \varphi) = \alpha (2\varphi - 1) = \alpha \sqrt{5}\,\!</math>. Logo, <math>\alpha = \frac{1}{\sqrt{5}}\,\!</math>.
Como <math>\hat{\varphi} = 1 - \varphi</math> (verifique!), tem-se <math>1 = \alpha (\varphi - 1 + \varphi) = \alpha (2\varphi - 1) = \alpha \sqrt{5}</math>. Logo, <math>\alpha = \frac{1}{\sqrt{5}}</math>.


Assim, <math>\begin{bmatrix} 1 \\ 0 \end{bmatrix} = \frac{1}{\sqrt{5}}(v - v')\,\!</math>. Em consequência:
Assim, <math>\begin{bmatrix} 1 \\ 0 \end{bmatrix} = \frac{1}{\sqrt{5}}(v - v')</math>. Em consequência:
:<math>\begin{bmatrix} F_{n+1} \\ F_{n} \end{bmatrix} = \alpha (\lambda_1^n v) + \alpha' (\lambda_2^n v') = \frac{1}{\sqrt{5}} (\varphi^n \begin{bmatrix} \varphi \\ 1 \end{bmatrix}) - \frac{1}{\sqrt{5}} (\hat{\varphi}^n \begin{bmatrix} \hat{\varphi} \\ 1 \end{bmatrix})\,\!</math>
:<math>\begin{bmatrix} F_{n+1} \\ F_{n} \end{bmatrix} = \alpha (\lambda_1^n v) + \alpha' (\lambda_2^n v') = \frac{1}{\sqrt{5}} (\varphi^n \begin{bmatrix} \varphi \\ 1 \end{bmatrix}) - \frac{1}{\sqrt{5}} (\hat{\varphi}^n \begin{bmatrix} \hat{\varphi} \\ 1 \end{bmatrix})</math>


Em particular, escrevendo a igualdade entre as segundas coordenadas desses vetores, obtem-se a fórmula desejada:
Em particular, escrevendo a igualdade entre as segundas coordenadas desses vetores, obtem-se a fórmula desejada:
:<math>F_n = \frac{1}{\sqrt{5}}(\varphi ^n - \hat{\varphi}^n)\,\!</math>
:<math>F_n = \frac{1}{\sqrt{5}}(\varphi ^n - \hat{\varphi}^n)</math>
}}
}}


== Exercícios ==
== Exercícios ==
# Verifique, utilizando o princípio de indução, que:
# Verifique, utilizando o princípio de indução, que:
#:<math>\begin{bmatrix} F_{n+1} \\ F_{n} \end{bmatrix} = \begin{bmatrix} 1 & 1\\ 1 & 0 \end{bmatrix}^n \cdot \begin{bmatrix} F_{1} \\ F_{0} \end{bmatrix}\,\!</math>
#:<math>\begin{bmatrix} F_{n+1} \\ F_{n} \end{bmatrix} = \begin{bmatrix} 1 & 1\\ 1 & 0 \end{bmatrix}^n \cdot \begin{bmatrix} F_{1} \\ F_{0} \end{bmatrix}</math>
# Escreva outra demonstração para a fórmula de Binet, utilizando o princípio de indução.
# Escreva outra demonstração para a fórmula de Binet, utilizando o princípio de indução.



Edição atual desde as 20h43min de 27 de fevereiro de 2012

Neste capítulo, será discutido quão eficiente é o algoritmo de Euclides para o cálculo do MDC. De forma mais precisa, se forem dados dois números inteiros:

Quantas etapas (divisões) do algoritmo são necessárias para que um resto seja zero?

Fazendo estimativas[editar | editar código-fonte]

Recorde-se que o algoritmo baseia-se na construção da sequência:

cujos termos verificam as seguintes igualdades:

1
2
k-1
k pois

O algoritmo fornece , que é o último resto não nulo, obtido em passos (divisões).

Uma observação importante é que o resto de uma divisão é sempre menor que a metade do dividendo:

Sendo a primeira desigualdade válida porque e a segunda porque . Deste modo, tem-se

e em geral

, para cada .

Assim, comparando os termos cujos índices são pares, segue:

Por indução, resulta para cada termo:

De modo análogo, ao comparar os termos ímpares, e usar novamente indução, segue:

Com isso, a sequência dos decresce geometricamente, pois está fixado. O fato de ser uma sequência decrescente já havia sido demonstrado quando se justificou o funcionamento do algoritmo de Euclides. A novidade aqui é a velocidade com que a sequência decresce. Pelos cálculos anteriores, os restos diminuem, no mínimo, tão rápido quanto os termos da progressão geométrica .

A questão colocada era: Quantas divisões são necessárias para que o resto seja zero?

Analisando a progressão geométrica dada anteriormente, conclui-se que algum de seus termos é menor do que . Nesse caso, o resto correspondente será nulo, e o algoritmo para. Para ser mais exato, como

o menor índice inteiro que torna menor que é

Onde denota o maior inteiro que não supera (a parte inteira de ).

Então , e consequentemente , pois os restos são números inteiros não-negativos.

Assim, sabendo que o algoritmo para exatamente quando , conlui-se que tal índice não pode ser maior que , em símbolos:

Para melhor compreender o significado dessa estimativa, considere que tem dígitos decimais. Então:

Aplicando o logaritmo em ambos os membros da segunda desigualdade, resulta

Logo, , que para valores grandes de é aproximadamente .

Embora esta não seja a melhor aproximação para , já é bastante útil, pois mostra que o número de etapas cresce linearmente com o número de dígitos de .

O pior caso[editar | editar código-fonte]

Para obter uma estimativa mais precisa do número de etapas que o algoritmo de Euclides leva para determinar o MDC de dois números, será considerada a seguinte questão:

Qual é o menor valor de para o qual o algoritmo leva passos?

Veja alguns exemplos utilizando a representação matricial do algoritmo:

Para :

Para :

Para :

É fácil perceber que é mínimo quando os valores forem todos iguais a , cada entrada da matriz é um polinômio nas variáveis (que são positivas), e cujos coeficiêntes são (se puder, acrescente uma justificativa mais formal).

Se cada quociente for substituído por na fórmula de recorrência

Esta passará a ser:

Que vale para satisfazendo .

A nova relação lembra a fórmula que define a sequência de Fibonacci, embora esteja "ao contrário".


Este módulo tem a seguinte tarefa pendente: Conferir se o expoente k+1 está correto ou se deveria ser k, na próxima equação

Matricialmente, as condições produzem as seguintes igualdades:

, sendo que .

Com um simples uso do princípio de indução finita, consegue-se:

, desde que .

Deste modo,

Como , segue que

Teorema

Dado , sejam e os menores números tais que o algoritmo de Euclides aplicado a e leva exatamente passos, então e .

Exemplificando[editar | editar código-fonte]

Para determinar o valor de , seria necessário efetuar cinco divisões:

Logo, . Aproveitando este exemplo, observe que:

No entanto, se qualquer dos números for menor, o algoritmo requer menos etapas. Por exemplo, ao determinar tem-se:

Donde, .

Já o cálculo de é ainda mais simples:

Portanto, .

Melhorando as estimativas[editar | editar código-fonte]

Sabendo qual é o pior caso para a aplicação do algoritmo de Euclides, pode-se deduzir uma melhor estimativa de sua eficiência. Uma análise mais elaborada que aquela apresentada no início do capítulo fornece o seguinte resultado:

Teorema de Lamé[editar | editar código-fonte]

Teorema

O número de passos (de divisões) no algoritmo de Euclides com entradas e é limitado superiormente por vezes a quantidade de dígitos decimais em .

Gabriel-Lamé
Este módulo tem a seguinte tarefa pendente: Incluir breve biografia sobre Lamé.

Para demonstrar o teorema de Lamé, é importante ter em mente algumas propriedades relacionadas a sequência de Fibonacci e ao número de ouro:

Tem-se:

Demonstração
A verificação é direta, exigindo cálculos bastante simples.
  • , arredondado para o inteiro mais próximo.
Demonstração
Utilizando a fórmula de Binet, basta observar que o módulo de é menor que , e consequentemente, quando , tem-se
Demonstração
A justificativa será dada por indução:
  1. Se for verdade que , então:
Demonstração
De fato, valem as seguintes equivalências:

Mas (verifique a partir de ), e pois

Sendo que esta última desigualdade é verdadeira.

Como foi visto anteriormente, quando é exige exatamente passos, é tem-se e . Logo,

Aplicando o logaritmo em ambos os menbros, segue:

ou seja

Mas , então:

, onde é o número de dígitos de

Demonstração da fórmula de Binet[editar | editar código-fonte]

Nesta seção, será deduzida a fórmula de Binet:

onde e .

A principal razão para se utilizar está fórmula, em vez da definição recursiva da sequência de Fibonacci, é que ela permite a obtenção de um termo da sequência sem precisar calcular os anteriores.

Demonstração
A relação entre os termos da sequência pode ser descrita matricialmente da seguinte forma:

Para simplificar, será adotada a seguinte notação:

A partir de um simples argumento de indução (veja exercício 1), obtem-se:

Neste ponto, recorre-se à Álgebra linear, para obter um jeito simples de calcular o produto acima. Se puder ser escrito

, com e sendo auto-vetores de , ou seja, vetores não nulos tais que e , será possível obter:

A partir daí será bastante simples conseguir a fórmula explicita para (a segunda componente do vetor à esquerda), pois seriam constantes.

É, portanto, necessário determinar essas constantes, a começar pelos auto-valores de . Tem-se:

Logo , ou seja, Assim, (que implica ) ou . O primeiro caso não é de interesse, pois auto-vetores não são nulos.

Note que a equação acima possui duas raízes:

Além disso, se é raiz da equação, então para cada , o vetor

é um auto-vetor de .

Em particular, se , os auto-vetores correspondentes a cada raiz da equação quadrática são:

De modo que e

Resta escrever conforme se pretendia. Isso é fácil, já que são conhecidos e :

Da segunda equação, segue que . Substituindo esse valor na primeira equação, resulta:

Como (verifique!), tem-se . Logo, .

Assim, . Em consequência:

Em particular, escrevendo a igualdade entre as segundas coordenadas desses vetores, obtem-se a fórmula desejada:

Exercícios[editar | editar código-fonte]

  1. Verifique, utilizando o princípio de indução, que:
  2. Escreva outra demonstração para a fórmula de Binet, utilizando o princípio de indução.

Por enquanto, não há muitos exercícios sobre este capítulo. O leitor está convidado a adicionar mais ítens a essa seção, para ajudar a melhorar o texto.