Teoria de números/Eficiência do algoritmo de Euclides: diferenças entre revisões
[edição não verificada] | [edição verificada] |
Conteúdo apagado Conteúdo adicionado
Correção de typos e formatação geral, typos fixed: substituido → substituído utilizando AWB |
m hack obsoleto: as fórmulas já aparecem em PNG e não há mais como exibi-las em HTML nem MathML (futuramente teremos MathJax) |
||
Linha 6:
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
cujos termos verificam as seguintes igualdades:
{| cellpadding=0px cellspacing=6px
|-
|align=center width=50px|'''1''' ||align=right| <math>r_0 =
|-
|align=center|'''2''' ||align=right| <math>r_1 =
|-
| ||align=right| <math>\vdots
|-
|align=center|'''k-1''' ||align=right| <math>r_{k-2} =
|-
|align=center|'''k''' ||align=right| <math>r_{k-1} =
|}
O algoritmo fornece <math>(a,b) = r_k
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
Sendo a primeira desigualdade válida porque <math>q_0\ge 1
:<math>r_0 > 2r_2
:<math>r_1 > 2r_3
:<math>r_2 > 2r_4
:<math>r_3 > 2r_5
e em geral
:<math>r_{k}>2r_{k+2}
Assim, comparando os termos cujos índices são pares, segue:
:<math>r_{0}<a/2
:<math>r_{2}<r_{0}/2<a/4
:<math>r_{4}<r_{2}/2<r_{0}/4<a/8
:<math>\ldots
{{Wikipedia|Progressão geométrica#Progressão geométrica decrescente}}
Por indução, resulta para cada termo:
:<math>r_{2j}<a/2^{j+1}
De modo análogo, ao comparar os termos ímpares, e usar novamente indução, segue:
:<math>r_{2j+1}<a/2^{j+1}
Com isso, a sequência dos <math>r_j
A questão colocada era: ''Quantas divisões são necessárias para que o resto <math>r_{k+1}
Analisando a progressão geométrica dada anteriormente, conclui-se que algum de seus termos é menor do que <math>1
:<math>\frac{a}{2^{x}} < 1 \Leftrightarrow a < 2^{x} \Leftrightarrow \log_2 a < x
o menor índice inteiro <math>t
:<math>t = \lfloor \log_2 a \rfloor + 1
Onde <math>\lfloor \alpha \rfloor
Então <math>r_{2t} < \frac{a}{2^{t+1}} < \frac{a}{2^{t}} < 1
Assim, sabendo que o algoritmo para exatamente quando <math>r_{k+1} = 0
:<math>k+1 \le 2(\lfloor \log_2 a \rfloor + 1)
Para melhor compreender o significado dessa estimativa, considere que <math>a
:<math>10^{N-1}\le a < 10^N
Aplicando o logaritmo em ambos os membros da segunda desigualdade, resulta
:<math>\log_2 a < N\cdot\log_2 10
Logo, <math>k+1 \le 2 (\lfloor\log_2 a\rfloor +1)< 2N\cdot\log_2 10 + 2
Embora esta não seja a melhor aproximação para <math>k
=== O pior caso ===
<!-- 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
tem-se
* <math>r_{2j }<a/2^{j+1}
* <math>r_{2j+1}<a/2^{j+1}
-->
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
Veja alguns exemplos utilizando a representação matricial do algoritmo:
Para <math>n=1
:<math>\begin{bmatrix} a \\ b \end{bmatrix} = \begin{bmatrix} q_0 & 1\\ 1 & 0 \end{bmatrix} \cdot \begin{bmatrix} d \\ 0 \end{bmatrix}
Para <math>n=2
:<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}
Para <math>n=3
:<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}
É fácil perceber que <math>a
Se cada quociente for substituído por <math>1
:<math>r_{j-1} = r_jq_{j-1} + r_{j+1}
Esta passará a ser:
:<math>r_{j-1} = r_j + r_{j+1}
Que vale para <math>j
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:
A sequência de fibonacci é definida pelas seguintes equações:
* <math>F_0 = 0
* <math>F_1 = 1
* <math>F_k = F_{k-1} + F_{k-2}
Assim, seus primeiros termos são: <math>0, 1, 1, 2, 3, 5, 8, 13, 21, 34, \ldots
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}}
onde:
* <math>\varphi = \frac{1 + \sqrt{5}}{2} \approx 1.618
* <math>\hat{\varphi} = \frac{1 - \sqrt{5}}{2} = \approx -0.618
}}
{{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>\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)
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}
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>
Como <math>d=(a,b)\ge 1
* <math>a\ge F_{k+2}
* <math>b\ge F_{k+1}
{{Teorema
|Dado <math>n\ge 1
}}
==== Exemplificando ====
Para determinar o valor de <math>(F_7, F_6) = (13, 8)
:{|
|-
|align=right| <math>13 = 8\cdot1 + 5
|-
|align=right| <math>8 = 5\cdot1 + 3
|-
|align=right| <math>5 = 3\cdot1 + 2
|-
|align=right| <math>3 = 2\cdot1 + \mathbf{1}
|-
|align=right| <math>2 = \mathbf{1}\cdot2 + 0
|}
Logo, <math>(13,8) = 1
:<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}
No entanto, se qualquer dos números for menor, o algoritmo requer menos etapas. Por exemplo, ao determinar <math>(13, 7)
:{|
|-
|align=right| <math>13 = 7\cdot1 + 6
|-
|align=right| <math>7 = 6\cdot1 + \mathbf{1}
|-
|align=right| <math>6 = \mathbf{1}\cdot6 + 0
|}
Donde, <math>(13,7) = 1
Já o cálculo de <math>(12, 8)
:{|
|-
|align=right| <math>12 = 8\cdot1 + \mathbf{4}
|-
|align=right| <math>8 = \mathbf{4}\cdot2 + 0
|}
Portanto, <math>(12,8) = 4
== Melhorando as estimativas ==
Linha 187:
=== Teorema de Lamé ===
{{Teorema
|O número de passos (de divisões) no algoritmo de Euclides com entradas <math>u
}}
Linha 197:
{{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]]:
:<math>\varphi = \frac{1 + \sqrt{5}}{2} \approx 1.618
Tem-se:
* <math>\varphi^2 = \varphi + 1
{{Demonstração|A verificação é direta, exigindo cálculos bastante simples.}}
* <math>F_n = \frac{\varphi^n}{\sqrt{5}}
{{Demonstração
|Utilizando a fórmula de Binet, basta observar que o módulo de <math>\hat{\varphi}
}}
* <math>F_n \ge \varphi^{n-1}
{{Demonstração
|A justificativa será dada por indução:
# <math>F_1 = 1 \ge 1 = \varphi^0
# Se for verdade que <math>F_n \ge \varphi^{n-1}
:<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>\log \varphi < \frac{1}{5}
{{Demonstração
|De fato, valem as seguintes equivalências:
<math>\log \varphi < \frac{1}{5} \Leftrightarrow 5\log \varphi < 1 \Leftrightarrow \log \varphi^5 < 1
Mas <math>\varphi^5 =5\varphi + 3
:<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
Sendo que esta última desigualdade é verdadeira.
}}
Como foi visto anteriormente, quando <math>(a,b)
:<math>a\ge F_n+2 \ge \varphi^{n+1}
Aplicando o logaritmo em ambos os menbros, segue:
:<math>(n+1)\log \varphi \le \log a
ou seja
:<math>n\le \frac{\log a}{\log \varphi} = \log_{\varphi}a
Mas <math>\frac{1}{\log \varphi} < 5
:<math>n\le \frac{1}{\log \varphi}\cdot \log a < 5\log_{\varphi}a < 5N
== Demonstração da 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}}
onde <math>\varphi = \frac{1 + \sqrt{5}}{2}
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
|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}
Para simplificar, será adotada a seguinte notação:
:<math>Q = \begin{bmatrix} 1 & 1\\ 1 & 0 \end{bmatrix}
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}
Neste ponto, recorre-se à [[Álgebra linear]], para obter um jeito simples de calcular o produto acima.
Se puder ser escrito
:<math>\begin{bmatrix} 1 \\ 0 \end{bmatrix} = \alpha v+\alpha'v'
:<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')
A partir daí será bastante simples conseguir a fórmula explicita para <math>F_n
É, portanto, necessário determinar essas constantes, a começar pelos auto-valores de <math>Q
:<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 & & & = & \lambda y
\end{matrix}\right.
Logo <math>\lambda y + y = \lambda^2 y
Assim, <math>y=0
Note que a equação acima possui duas raízes:
* <math>\lambda_1 = \varphi = \frac{1 + \sqrt{5}}{2}
* <math>\lambda_2 = \hat{\varphi} = \frac{1 - \sqrt{5}}{2}
Além disso, se <math>\lambda
:<math>\begin{bmatrix} \lambda y \\ y \end{bmatrix} = y \begin{bmatrix} \lambda \\ 1 \end{bmatrix}
Em particular, se <math>y=1
* <math>v = \begin{bmatrix} \varphi \\ 1 \end{bmatrix}
* <math>v'= \begin{bmatrix} \hat{\varphi} \\ 1 \end{bmatrix}
De modo que <math>Qv = \varphi v
Resta escrever <math>\begin{bmatrix} 1 \\ 0 \end{bmatrix} = \alpha v+\alpha'v'
:<math>\left\{\begin{matrix}
1 & = & \alpha \varphi & + & \alpha' \hat{\varphi}\\
0 & = & \alpha & + & \alpha'
\end{matrix}\right.
Da segunda equação, segue que <math>\alpha' = -\alpha
<math>1 = \alpha \varphi - \alpha' \hat{\varphi} = \alpha (\varphi - \hat{\varphi})
Como <math>\hat{\varphi} = 1 - \varphi
Assim, <math>\begin{bmatrix} 1 \\ 0 \end{bmatrix} = \frac{1}{\sqrt{5}}(v - v')
:<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})
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)
}}
== Exercícios ==
# 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}
# Escreva outra demonstração para a fórmula de Binet, utilizando o princípio de indução.
|