Observamos que cada paso del algoritmo euclidiano (EA) no es más que un desentrañamiento de la recurrencia hacia atrás que comienza $f_{n+2}=1\cdot f_{n+1}+f_{n}$ hasta que, después de $n$ pasos que alcanzamos $f_{3}=2\cdot f_{2}+0$ por el cual $f_{1}=f_{2}=1$ es siempre el $\gcd$ de números de Fibonacci adyacentes: $(f_{n+1},f_{n})=1$ .
\begin{align*} f_{n+2}&=1\cdot f_{n+1}+f_{n}\\ f_{n+1}&=1\cdot f_{n}+f_{n-1}\\ \dots\dots &\dots\dots \dots\dots\dots\\ f_{4}&=1\cdot f_{3}+f_{2}\\ f_{3}&=2\cdot f_{2} \end{align*} Esto muestra el peor escenario para la EA, ya que todos los cocientes parciales, excepto el último, son $1$ por lo que tardará un máximo de $n$ pasos. De hecho, el menor de tales números que toman un máximo de $n$ pasos son números de Fibonacci adyacentes, como mostramos ahora.
Un teorema de Gabriel Lame muestra que el número de divisiones requeridas por la EA es como máximo $5$ veces el número de dígitos del menor de los números. Para ello necesitamos la desigualdad \begin{equation} f_{n+5}>10f_{n}\quad\text{ for $n=2,\,3,\,4,\dotsc$}\tag{1} \end{equation} Esto es válido para $n=2$ . Para $n\geq3$ \begin{align*} f_{n+5}&=f_{n+4}+f_{n+3}=2f_{n+3}+f_{n+2}=3f_{n+2}+2f_{n+1}\\ &=5f_{n+1}+3f_{n}=8f_{n}+5f_{n-1} \end{align*} Como la sucesión de Fibonacci no es decreciente, tenemos $f_{n}=f_{n-1}+f_{n-2}\leq 2f_{n-1}$ lo que implica $2f_{n}\leq 4f_{n-1}$ . Por lo tanto $f_{n+5}=8f_{n}+5f_{n-1}>8f_{n}+4f_{n-1}\geq10f_{n}$ lo que implica $f_{n+5}>10f_{n}$ según sea necesario. Utilicemos ahora la inducción para el caso general: \begin{equation} f_{n+5k}>10^kf_{n}\quad\text{ for $n=2,\,3,\,4,\dotsc$; $k=1,\,2,\,3,\dotsc$}\tag{2} \end{equation} En $k=1$ se ha demostrado que es cierto para algunos casos arbitrarios. $k\in\mathbb{N}$ y mostrar por $k+1$ : \begin{align*} f_{n+5(k+1)}&=f_{n+5+5k}=f_{n+4+5k}+f_{n+3+5k}=2f_{n+3+5k}+f_{n+2+5k}\\ &=3f_{n+2+5k}+2f_{n+1+5k} =5f_{n+1+5k}+3f_{n+5k}\\ &=8f_{n+5k}+5f_{n-1+5k} \end{align*} Como antes $f_{n+5k}=f_{n-1+5k}+f_{n-2+5k}\leq 2f_{n-1+5k}$ lo que implica $2f_{n+5k}\leq 4f_{n-1+5k}$ . Por lo tanto \begin{align*} f_{n+5(k+1)}&=8f_{n+5k}+5f_{n-1+5k}>8f_{n+5k}+4f_{n-1+5k}\\ &\geq10f_{n+5k}>10\cdot10^k f_{n}=10^{k+1}f_{n} \end{align*} por hipótesis, lo que implica $f_{n+5(k+1)}>10^{k+1}f_{n}$ según sea necesario para completar la inducción.
Ahora dejemos que $a_{0}$ y $a_{1}\in\mathbb{N}$ con $a_1<a_0$ y asumir que se necesita $j$ divisiones para encontrar $(a_0,a_1)$ por la EA: \begin{align*} a_{0}&=q_1\cdot a_{1}+a_{2}\\ a_{1}&=q_2\cdot a_{2}+a_{3}\\ \dots&\dots\dots\dots \dots\dots\dots\\ a_{j-2}&=q_{j-1}\cdot a_{j-1}+a_{j}\\ a_{j-1}&=q_j\cdot a_{j} \end{align*} Ahora $q_j\neq1$ desde entonces $a_{j-1}=a_{j}$ . Así $a_{j-1}=q_j\cdot a_{j}\geq2a_{j}\geq2=f_3$ . Por lo tanto $a_{j-2}\geq a_{j-1}+a_{j}\geq f_3+f_2=f_4$ , $a_{j-3}\geq a_{j-2}+a_{j-1}\geq f_4+f_3=f_5$ hasta llegar a $a_1\geq f_{j}+f_{j-1}=f_{j+1}$ y $a_1\geq f_{j+1}+f_{j}=f_{j+2}$ . Si $j\geq5k+1$ entonces $a_1\geq f_{5k+2}>10^kf_2=10^k$ por $(2)$ y así tiene al menos $k+1$ dígitos. Por lo tanto, si $a_1$ tiene $k$ dígitos, entonces $j\leq5k$ es decir, para $a_1$ teniendo $k$ dígitos, como máximo $5k$ Las divisiones se exigen en la EA según sea necesario. Estas desigualdades demuestran la afirmación anterior de que los números de Fibonacci adyacentes $f_{j+2}$ y $f_{j+1}$ son los que menos hay que tomar $j$ pasos para completar la EA y si tarda $j$ iteraciones para encontrar $(a_0,a_1)$ como arriba, entonces $a_0\geq f_{j+2}$ y $a_1\geq f_{j+1}$ .
La fórmula cerrada de Binet para los números de Fibonacci es $$f_{n}=\frac{\varphi^{n}-\psi^{n}}{\varphi -\psi}=\frac{\varphi^{n}-\psi ^{n}}{\sqrt {5}}$$ donde $$\varphi =\frac{1+\sqrt {5}}{2}\approx1.6180339887\dotsc \quad\text{and}\quad\psi =\frac{1-\sqrt {5}}{2}\approx-0.6180339887\dotsc$$ La fórmula de Binet muestra $f_n$ es asintótica a $\varphi^n/\sqrt{5}$ lo que implica
\begin{equation}\label{eq:logfnsqrt5} n\approx \log_{\varphi}(f_n\sqrt{5})\approx \log_{\varphi}f_n \end{equation}
Por lo tanto, si para números enteros $0<a<b$ la EA exige $n+1$ pasos, entonces $b\geq f_{n+3}$ , $a\geq f_{n+2}\geq \varphi^{n}$ entonces $n<\log_{\varphi}a$ .
Desde $f_n\sim \varphi^n/\sqrt{5}$ también tenemos el número de dígitos en $f_n$ dado aproximadamente como \begin{equation}\label{eq:digitsfn}\log_{10}\,f_n \approx n\log_{10}\varphi\approx0.20899n \end{equation} donde utilizamos la base $10$ ya que estamos en decimal.
Por lo tanto, si la EA toma $n+1$ pasos $0.2n<\log_{10}\varphi \log_{\varphi}a =\log_{10}a$ . Así, $n<5\log_{10}a$ lo que implica que la EA siempre necesita menos de $O(\text{#digits of $ a $})$ divisiones.
La EA también se conoce como algoritmo de fracciones continuas ya que el $q_i$ de la EA forman los cocientes parciales de la fracción $a_0/a_1$ fracción continua.
Sea $a_0$ y $a_1$ ser como antes, teniendo $j$ ecuaciones lineales obtenidas mediante la EA. Para $i=1,\dotsc, j-1$ deje $$\frac{a_{i-1}}{a_{i}}=q_{i}+\frac{1}{\frac{a_i}{a_{i+1}}}\quad\text{and}\quad\frac{a_{j-1}}{a_j}=q_j$$ Esto da una fracción continua simple $$\frac{a_0}{a_1}=[q_1;\,q_2,\dotsc,q_{j-1},\,q_j]$$ donde todos los numeradores son $1$ . Ahora $q_1$ es un número entero, y como $a_{i-1}>a_i$ , $q_2,\dotsc,q_j$ son números naturales. Entonces al aplicar esto a la secuencia de Fibonacci $$\frac{f_{n+1}}{f_{n}} =[1;\,1,\dotsc,1,\,1]\tag{3}$$ donde hay $(n-1)$ $1s$ después del punto y coma; nótese que también podríamos escribirlo como $$\frac{f_{n+1}}{f_{n}} =[1;\,1,\dotsc,1,\,2]$$ con $(n-3)$ $1s$ Después del punto y coma y una terminación $2$ en la fracción continua para $n\geq3$ . Observamos el número de cocientes parciales en la fracción continua en $(3)$ y así en general para dos enteros cualesquiera, da el número de pasos necesarios en el EA.
0 votos
¿Has probado a ejecutar el algoritmo con lápiz y papel? $\gcd(21, 34)$ , $\gcd(34, 55)$ , $\gcd(55, 89)$ , $\gcd(89, 144)$ etc. Con estos dos últimos ejemplos, el resultado del algoritmo debería estar claro incluso antes de empezar, puesto que ya sabes $89$ es primo, por lo que $55$ no es claramente un divisor y $144$ no es un múltiplo.
0 votos
Otra cosa que podrías hacer es escribir un pequeño programa informático que utilice el algoritmo y lleve la cuenta de cuántos pasos da cada par.