miércoles, 9 de enero de 2019

Número igual al cubo de la suma de sus cifras



Hace unas semanas, ordenando mis papeles, encontré una hoja de hace casi cuarenta años en la que resumía un ejercicio para la calculadora programable Texas Instrument TI-58. Me impresionó recordar lo complicado que era su lenguaje de programación y las dificultades que tuvimos que soportar quienes iniciamos el uso de la Informática en las aulas. Por ello, he querido, a través de mi propia persona, rendir homenaje al profesorado que dio esos primeros pasos.

Resulta que lo que yo estaba buscando en esa hoja eran los números de Dudeney (no puedo recordar si en aquellos años los conocía por este nombre, creo que sí), aquellos que coinciden con el cubo de la suma de sus cifras, como 4913=(4+9+1+3)3. Yo lo expresaba de distinta forma, como vemos en mi manuscrito escaneado:

Se expresa en él la búsqueda de números cuya raíz cúbica coincide con la suma de sus cifras. Es preferible la formulación de más arriba, que evita el uso de la raíz, con toda la complicación de su expresión decimal.

En este manuscrito se incluía también un diagrama de flujo, que ahora, con la programación estructurada y la orientada a objetos, ha quedado como algo antiguo, pero que en su momento nos ayudó mucho a razonar. En él se evita el uso de la raíz cúbica.


La falta de costumbre me ha obligado a estudiar este esquema con detenimiento, lo que aumenta mi asombro al recordar la precariedad de medios de entonces. Y peor era su traducción al lenguaje propio de la TI-58, muy próximo al ensamblador. Véase una muestra:


¿Cómo abordaríamos este problema pasadas cuatro décadas?

En el caso de este blog acudiríamos a Excel o Calc, con su lenguaje Basic, o al lenguaje PARI, que se nos ha hecho imprescindible.


  
Uso de la función SUMACIFRAS

En este curso hemos usado con frecuencia la suma de cifras de un número, pero para evitar la consulta a otras entradas, reproduzco de nuevo aquí la función usada. Se aplica a dos argumentos, el número n y el exponente k al que se elevan las cifras en la suma:

Public Function sumacifras(n, k)
Dim h, i, s, m

h = n ‘Copia el valor de n
s = 0 ‘Variable que contendrá la suma
While h > 9 ‘Se extraen cifras hasta que sólo quede una
i = Int(h / 10) ‘Dos líneas para extraer la siguiente cifra
m = h - i * 10
h = i ‘El valor de h va descendiendo al extraerle cifras
s = s + m ^ k ‘Se incrementa la suma
Wend
s = s + h ^ k ‘Última cifra
sumacifras = s
End Function

En esta entrada sólo usaremos exponente 1, por lo que las llamadas a la función serán del tipo sumacifras(n;1)

Con esta función se puede organizar la búsqueda de los números de Dudeney:

For i = 1 To 100
b = i ^ 3
If sumacifras(b, 1) = i Then msgbox(b)
Next i

Con un código algo más preciso, se puede construir la tabla:


En ella quedan destacadas las igualdades entre la raíz cúbica y la suma de cifras. No hay más soluciones, como demostraremos más adelante. Estos números están publicados en blogs y páginas de Matemáticas, y en especial en 

A061209         Numbers which are the cubes of their digit sum.                
0, 1, 512, 4913, 5832, 17576, 19683

Llama la atención la simplicidad del código en PARI:

(PARI) for(n=0, 999999, sumdigits(n)^3==n&&print1(n", ")) \\ M. F. Hasler, Apr 12 2015

¿Por qué interrumpimos la búsqueda en las seis cifras? Esto lo razoné hace cuarenta años, cuando me iniciaba en la programación con números enteros. 

Copio y adapto mi razonamiento:

En un número n de k cifras, la suma de las mismas S es como máximo 9+9+9+…+9 k veces, luego S<10k. Por otra parte, n estará comprendido entre 10(k-1) y 10k. Si el número tiene más de seis cifras tendremos que su raíz cúbica cumplirá R>=10(k-1)/3 y (k-1)/3>2k. 

Será imposible que S=R, ya que S<10k<102k<R

La desigualdad central se ve mejor con logaritmos decimales:

10k<102k equivale a 1+log(k)<2k, en el que 1<k y log(k)<k, luego la desigualdad se cumple.

Esta es la razón por la que es inútil buscar más números de Dudeney.

Una vez resuelto el problema con la potencia tres, es sencillo extenderlo a las siguientes potencias. Lo dejamos como ejercicio. Por cierto, para cuadrados sólo existen dos soluciones, 1 y 81.

Las soluciones con cuartas potencias son
1             1
7             2401
22          234256
25          390625
28          614656
36          1679616
              
Las tienes publicadas en http://oeis.org/A061210, y se puede demostrar que no existen soluciones con más de ocho cifras.

Con quintas potencias son estas:

1             1
28          17210368
35          52521875
36          60466176
46          205962976



Caso general

En http://oeis.org/A023106 están publicados todos aquellos números que son potencia de la suma de sus cifras, sin especificar el exponente:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 81, 512, 2401, 4913, 5832, 17576, 19683, 234256, 390625, 614656, 1679616, 17210368, 34012224, 52521875, 60466176, 205962976, 612220032, 8303765625, 10460353203, 24794911296, 27512614111, 52523350144, 68719476736,…

Podemos reproducir esta lista, no considerando los de una cifra,  que son casos particulares (exponente 1). Basta usar esta función, que para cada número te devuelve “NO” si no tiene la propiedad exigida, y la suma de cifras y el exponente si la tiene:

Public Function tipodudeney(n) As String
Dim p$
Dim i, j, s, t

p$ = "" ‘Resultado, en principio vacío
For i = 2 To Sqr(n) ‘Recorremos posibles raíces enésimas de n
s = Int(Log(n) / Log(i) + 0.000001) ‘Evaluamos el posible exponente entero
If n = i ^ s Then ‘Si efectivamente, es raíz enésima, sumamos cifras
t = sumacifras(n, 1)
If t = i Then p$ = p$ + Str(i) + " " + Str(s) + "  " ‘Si existe coincidencia, añadimos solución
End If
Next i
If p = "" Then p = "NO" ‘No existe solución
tipodudeney = p$ ‘Se publica raíz y exponente
End Function

Con un poco de paciencia, porque en Excel va lento (y en Calc más), logramos las primeras soluciones. Estas son las inferiores a 500000:



Entre ellas figuran exponentes 2, 3 y 4, con soluciones ya conocidas.

Dejamos aquí el estudio. Ha sido interesante revisar uno de mis primeros trabajos en programación. Si encuentro otro, lo adaptaré también.


No hay comentarios: