lunes, 3 de junio de 2019

Iteración basada en la suma de cuadrados de cifras (1)


Por motivos de planificación de mis publicaciones, en este mes de junio publicaré las entradas correspondientes al tema de iteraciones basadas en el cuadrado de las cifras de un número, incluyendo en ellas el tema de los números felices. El resto de temas habituales quedan para después del verano.

En esta entrada de la serie de “vueltas” sobre los cuadrados de las cifras de un número, reproduciremos una curiosidad publicada por Fermat’s Library en Twitter el día 24 de abril de 2018:


Consiste la curiosidad en que si a un número cualquiera le sumas los cuadrados de sus cifras y reiteras la operación, terminarás en el valor 1, que sería invariante (y terminaría el proceso), o bien entraríamos en el ciclo {4, 16, 37, 58, 89, 145, 42, 20}

No se trata de una conjetura. La demostración se encuentra en


Puedes visitar estas direcciones para encontrar más referencias a estas iteraciones:


Como la cuestión está resuelta, salvo mejorar la demostración, aquí sólo nos queda construir una herramienta de hoja de cálculo para recorrer el proceso explicado. Es una tarea sencilla, por lo que la completaremos con el cálculo del número de iteraciones necesarias para llegar al 1 o al ciclo y también por qué número se entra en ese ciclo. 

En la imagen vemos que el número 2398 entra en el ciclo a través del número 37 y lo consigue en la sexta iteración.


En este otro ejemplo, el 79 llega al 1 en la tercera iteración:


Podríamos construir una función que nos devolviera el número de iteraciones y el valor de entrada al ciclo (o el 1). El problema radica en que sería una función con dos resultados, el número de iteraciones y el elemento por el que entra al ciclo. La definición de funciones tipo array en hoja de cálculo no es trivial, por lo que concatenaremos ambos números mediante una cadena de caracteres.

Como en otras muchas entradas que tratan de cifras, es conveniente eliminar el espacio en blanco que Excel y Calc añaden a los números positivos. Para ello usaremos la función AJUSTA, ya usada en este blog varias veces. Convierte el número en una cadena de caracteres sin espacios en blanco.

Function ajusta$(a)
Dim d$

d$ = Str$(a)
While Left$(d$, 1) = " "
d$ = Right$(d$, Len(d$) - 1)
Wend
ajusta$ = d$
End Function

Con ella podemos construir la función deseada. Hay que estudiar su listado con atención:

Public Function ciclocuad$(n)
Dim a$, c$, s$
Dim k, m, i, j
Dim final As Boolean

m = n ‘Se recoge la variable n en otra m para su manipulación
a$ = " 1 4 16 37 58 89 145 42 20 " ‘Conjunto formado por el 1 y los ocho números del ciclo
c$ = “ “+ajusta(m)+” “ ‘Las tres líneas siguientes detectan si m pertenece al ciclo
i = InStr(a$, c$)
If i > 0 Then ciclocuad = "$0#0$": Exit Function ‘Si pertenece, devolvemos dos ceros
final = False
j = 0
While Not final
m = sumacifras(m, 2) ‘Se sustituye el número m por la suma de cuadrados de sus cifras
j = j + 1
c$ = " " + ajusta(m) + " " ‘Se rodea el número de espacios en blanco para buscar en c$
i = InStr(a$, c$) ‘Si pertenece al conjunto, la variable i será mayor que 0
If i > 0 Then
final = True ‘Fin de la iteración
s$ = "$" + ajusta(j) + "#" + ajusta(m) + "$" ‘Los valores se rodean con # y $
End If
Wend
ciclocuad = s$
End Function

Para cada número aparecerá un resultado del tipo $6#58$, en el que 6 sería el número de iteraciones y 58 la entrada al ciclo. Se ha construido así para facilitar búsquedas posteriores.

Por ejemplo, para buscar los primeros números que entran en el ciclo a través del número 58 bastará buscar en el resultado de ciclocuad$ el trozo de cadena #58$, y para encontrar los que necesitan tres iteraciones buscaremos $3#. Esto explica que se hayan insertado esos caracteres.

Aquí tienes los primeros números que entran en el ciclo a través del 58:



Y estos los que necesitan tres iteraciones:


Según lo estudiado, los números se clasificarán en nueve clases de equivalencia según la entrada que tengan en el ciclo. Aquí tienes los primeros:


Puedes comprobar que todos los números pequeños pertenecen a una de las nueve clases de equivalencia. Dentro de la misma clase figurarán los números formados con las mismas cifras. Así, 145, 154, 415, 514, comparten la clase 42.
Se observa que con entrada en 37 y 89 hay muchos más, ya que el nuestro listado termina en 75 y 36 respectivamente. La más escasa se ve que es la correspondiente a 20.

Podemos, con un poco de paciencia, contar, por ejemplo, los que hay de cada clase del 1 al 2000:


Se percibe claramente el desequilibrio en las frecuencias. En la siguiente entrada estudiaremos un caso particular de esta iteración, como son los números felices.


No hay comentarios: