jueves, 31 de enero de 2019

Suma de cuadrados de cifras (4) -Números consecutivos con suma de cuadrados de cifras cuadrada en ambos


Llegamos a la cuarta entrega de la serie que venimos publicando sobre la suma de los cuadrados de las cifras de un número. Se inserta a continuación la dirección de la primera, y a partir de ella puedes ir leyendo las siguientes, que no son consecutivas, pues tienen intercalados otros temas:


http://hojaynumeros.blogspot.com/2018/11/suma-de-cuadrados-de-cifras-1-un.html

Números consecutivos con suma de cuadrados de cifras cuadrada en ambos

En el tema de la suma de cuadrados de las cifras. una cuestión curiosa es el descubrimiento de dos números consecutivos en los que ambos presenten sumas de cuadrados de cifras que también son cuadradas. Por ejemplo, 137209 y 137210 lo cumplen:

1^2+3^2+7^2+2^2+0^2+9^2=144=12^2
1^2+3^2+7^2+2^2+1^2+0^2=64=8^2

Usando la función SUMACIFRAS (ver entradas anteriores de esta serie) es fácil detectar estos pares de consecutivos, recorriendo todos y aplicando la suma de cuadrados de cifras a sus consecutivos. Así obtenemos la sucesión siguiente, formada por los elementos menores de cada par:


0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9999, 22449, 24249, 42249, 48889, 84889, 88489, 115609, 116509, 123709, 127309, 132709, 137209, 151609, 156109, 161509, 165109, 172309, 173209, 202449, 204249, 213709, 217309, 220449, 224049, 231709, 235509, 237109, 240249, 242049, 253509, 255309, 271309, 273109, 312709, 317209, 321709, 325509, 327109, 333609, 336309, 352509, 355209, 361999, 363309, 369969, 371209, 372109, 396969, 399669, 402249, 408889, …

Entre ellos están los de una cifra, que cumplen la condición trivialmente, y todos los demás terminan en 9.

Se puede razonar esa terminación en 9 para números de más de una cifra. La clave está en que la diferencia entre dos cuadrados es mayor o igual que 2N+1 si N es el menor del par. Si las unidades tuvieran otro valor, por ejemplo el 6, al incrementar esa cifra al 7 la diferencia de cuadrados sería de 2*6+1=13. La máxima diferencia entre los cuadrados de dos cifras consecutivas es de 2*9+1=19, pero eso no convertiría la suma total cuadrada en otra cuadrada mayor, pues al sumar los cuadrados de las cifras restantes se formaría un cuadrado mayor que el de la última cifra, que presentaría una diferencia mayor que la de la misma.

Ejemplos:

148 y 149 forman las sumas de cuadrados 1+16+64=81, 1+16+81=98. La diferencia es la prevista, 2*8+1=17, pero hemos elegido la primera para que forme el cuadrado 81, y su siguiente es 100, con una diferencia superior a 17.

Tomemos otro ejemplo, 488. La suma de cuadrados de cifras es 4^2+8^2+8^2=144. Si incrementamos el 8 al 9, la suma sería ahora de 4^2+8^2+9^2=161, con un incremento de 2*8+1=17, pero para pasar de 144 al siguiente cuadrado necesitamos 2*12+1=25, y nos faltan unidades.

Por tanto, la única cifra posible es 9, porque con ella se disminuye el cuadrado en lugar de aumentar, lo que no es posible, según hemos razonado.

Todos los elementos menores de estos pares terminarán en 9 si poseen varias cifras.

Si pasamos de un número terminado en 9 al siguiente, que lo hace en 0, se pierden 81 unidades en la suma de cuadrados de cifras (excluimos de este razonamiento el 9999, que es un caso especial). Esta pérdida se compensará con la ganancia que se produzca en las decenas. Sabemos que equivale a 2*k+1, luego la ganancia puede ser de 1, 3, 5, 7, 9, 11, 13, 15, 17 o 19, (según sean las decenas 0, 1, 2, 3,…,9), con lo que la pérdida equivaldrá a 80, 78, 76, 74, 72, 70,… Habría que investigar qué cuadrados presentan esa diferencia (no necesariamente consecutivos).

Se sabe que una diferencia de cuadrados, si es par,  ha de ser múltiplo de 4, luego las únicas diferencias válidas serían 80, 76, 72, 68 o 64, que se corresponden con las decenas 0, 2, 4, 6 y 8. Estas diferencias producen las siguientes diferencias de cuadrados (lo hemos calculado con una función adecuada):



Terminado en 09

La diferencia es 80 que equivale a tres diferencias de cuadrados, 9^2-1^2, 12^2-8^2 y 21^2-19^2

La primera sólo se da en el número 9, por razones evidentes

La diferencia entre 8^2 y 12^2 es la que más veces se presenta, como en 115609, 115610, en los que 1+1+25+36+0+81=144=12^2, 1+1+25+36+1=64=8^2

El par 19, 21 no aparece hasta números de siete cifras, así ocurre con 6999909 y 6999910:
36+81+81+81+81+0+81=441=21^2 y 36+81+81+81+81+0+1=361=19^2

Terminado en 29

Diferencia 76 que sólo se da en 20^2-18^2. Hay muy pocos casos. El primer ejemplo que hemos encontrado es 5889929 y 5889930.
25+64+64+81+81+4+81=400=20^2, 25+64+64+81+81+9+0=324=18^2

Otros ejemplos: 5898929, 5899829, 5988929, 5989829, 5998829 y 6699929

Terminado en 49

La diferencia es 72, que se da en 11^2-7^2 y 19^2-17^2

Se dan las dos diferencias:
7 y 11: 10231349 y 10231350, ya que 1+0+4+9+1+9+16+81=121=11^2, 1+0+4+9+1+9+25+0=49=7^2
19 y 17: 11689949 y 11689950: 1+1+36+64+81+81+16+81=361=19^2, 1+1+36+64+81+81+25+0=289=17^2

Terminado en 69

69 – Diferencia 68. Se da el 16,18, como era de esperar:

Uno de los primeros ejemplos es 396969 y 396970, con
9+81+36+81+36+81=324=18^2 y 9+81+36+81+49+0=256=16^2

Terminado en 89

La única diferencia es 64, en 17^2-15^2. No se da en los primeros ejemplos. Hay que buscar hasta más de un millón. El primero es 1156989 con 1156990, pues 1+1+25+36+81+64+81=289=17^2 y 1+1+25+36+81+81+0=225=15^2

Aunque la búsqueda ha resultado muy laboriosa, podemos afirmar que se dan todas las terminaciones posibles, 09, 29, 49, 69 y 89 y que los cuadrados resultantes tienen como valor máximo 400=20^2. Esto tiene un valor teórico importante, y es que las sucesión de números que estamos estudiando no tiene carácter infinito, pues está acotada por un número de 401 cifras, en el que todas las cifras fueran distintas de cero, por ejemplo,1111…(401…1111.

Si deseas experimentar por tu cuenta, puedes inspirarte en este código PARI, que está pensado para buscar terminaciones en 89 entre 1000000 y 3000000:

for(p=1000000, 3000000, a=norml2(digits(p)); b=norml2(digits(p+1)); if(issquare(a)&&issquare(b)&&p%100==89, print(p,", ",a,", ",b)))

Se han destacado en negrita los elementos que tendrías que cambiar.

lunes, 21 de enero de 2019

Suma por diferencia con añadido de una unidad



El día 29/10/18 publiqué en Twitter (@connumeros) la siguiente propiedad del número de fecha 291018:

291018 presenta dos productos muy parecidos basados en el número 540:
291018=(540-33)(540+34)
291018=(540-7)(540+6)

Es algo parecido a la diferencia de cuadrados (suma por diferencia) con el añadido de una unidad al sumando o al sustraendo. Pueden darse los dos casos, que representaremos por

N=(m+p)(m-p+1) o bien N=(m+p)(m-p-1)

Al primer caso le llamaremos C(-1), porque el sustraendo es una unidad menor que p, y al segundo C(+1).

Es fácil ver que N ha de ser par, pues si m y p son ambos pares o impares, su suma m+p será par, y si son de distinta paridad, lo es el otro factor. Al multiplicar siempre habrá un factor par, lo que convierte también en par el producto.

A la inversa, todo número par mayor que 2 (para evitar el valor 0) presenta dos soluciones triviales:

Todo número par n>2 cumple esta descomposición haciendo m=n/2+1 y p=n/2-1, pues entonces n=(n/2+1+n/2-1)(n/2+1-(n/2-1)-1)=n*1

También cumple esta otra: m=n/2, p=n/2, con n=(n/2+n/2)(n/2-n/2+1)=n*1

A partir de ahora eliminaremos estos dos casos, y sólo consideraremos el caso m-p>2.

Con esa restricción, el primer número que admite esta descomposición es el 10, si hacemos m=4 y p=1

10=(4+1)(4-2)=5*2

Será pues un caso del tipo C(+1).

Para saber si un número se puede descomponer de esta forma podemos usar la siguiente función:

Public Function sumapordif$(n) ‘Es de tipo string para contener soluciones
Dim m, p, a, k
Dim c$

c$ = "": k = 0 ‘c$ contiene soluciones y k las cuenta
For m = 2 To n - 1
For p = 1 To m – 3 ‘Respetamos una diferencia mayor que 2
a = 0
If n = (m + p) * (m - p - 1) Then a = 1 ‘Probamos las dos fórmulas
If n = (m + p) * (m - p + 1) Then a = -1
If a <> 0 Then k = k + 1: c$ = c$ + Str$(m) + Str$(p) + "#" + Str$(a)
‘Si alguna de las dos se verifica, se incorpora la solución y se incrementa el contador
Next p
Next m
If k > 0 Then c$ = Str$(k) + c$ ‘Se incorpora el contador a la solución
sumapordif = c$
End Function

Con ella podemos descubrir los primeros números pares que admiten solución:

10          1 4 1# 1
14          1 5 2# 1
18          2 5 1# 1 6 3# 1
20          1 4 1#-1
22          1 7 4# 1
24          1 6 2# 1
26          1 8 5# 1
28          2 5 2#-1 6 1# 1
30          3 5 1#-1 7 3# 1 9 6# 1
34          1 10 7# 1
36          3 6 3#-1 7 2# 1 8 4# 1
38          1 11 8# 1
40          2 6 2#-1 7 1# 1
42          3 6 1#-1 9 5# 1 12 9# 1
44          2 7 4#-1 8 3# 1
46          1 13 10# 1
48          1 10 6# 1
50          3 7 3#-1 8 2# 1 14 11# 1
52          2 8 5#-1 9 4# 1
54          4 7 2#-1 8 1# 1 11 7# 1 15 12# 1
56          1 7 1#-1
58          1 16 13# 1
60          5 8 4#-1 9 3# 1 9 6#-1 10 5# 1 12 8# 1

Para cada número figura en primer lugar el número de soluciones. Así, 60 presenta 5 soluciones. Después figuran los valores de m y p seguidos de # y de +1 o -1 según el tipo de solución.

Vemos que la solución para el 54 es 4 7 2#-1 8 1# 1 11 7# 1 15 12# 1. Eso significa que posee cuatro soluciones, una del tipo C(-1) y las otras del otro tipo.

En efecto, se cumple:


54=(7+2)(7-1)=(8+1)(8-2)=(11+7)(11-8)=(15+12)(15-13)


Soluciones dobles con el mismo valor de m

Un problema más difícil es el de determinar si un número, como el 291018 admite dos (o más) soluciones con el mismo valor de m. El algoritmo puede resultar algo complejo, por lo que hay que estudiarlo con atención. Para los valores de m usamos el rango desde 2 hasta la mitad del número, ya que m+p ha de ser divisor propio de n (si desechamos los casos triviales). Después, para cada valor de m contamos los casos favorables y, si son mayores que 1, los reservamos en la variable c$ para construir la función. Este es el listado:

Public Function sumapordifdup$(n)
Dim p, h, v, b, m, n2
Dim c$


If n Mod 2 <> 0 Then sumapordifdup = "": Exit Function ‘Desechamos los impares
n2 = n / 2 ‘n/2 es el tope para m
v = 0 ‘Contador de soluciones si procede
m = 2 ‘Inicio de m
c$ = "" ‘Contenedor de la solución
While m < n2 And v = 0 ‘Avanza hasta la mitad de n si no hay solución
p = 1: h = 0: c$ = "" ‘Se inician los valores para p
While p < m - 1 And v = 0
b = m + p ‘Se construye la suma m+p para ver si es divisor
If n Mod b = 0 Then ‘Si es divisor, se prueban las dos posibilidades
If n = b * (m - p - 1) Or n = b * (m - p + 1) Then c$ = c$ + Str$(m) + Str$(p): h = h + 1
‘La línea anterior es fundamental, porque cuenta soluciones para un mismo valor de m
End If
p = p + 1
Wend
If h > 1 Then v = h ‘Si hay más de una solución, se para el proceso
m = m + 1
Wend
If v>0 then sumapordifdup$ = c$ else sumapordifdup$ = “”
End Function

Aplicada esta función a nuestro valor 291018 se obtiene:




Coincide con el planteamiento inicial de esta entrada.

Esta función no nos informa sobre si el tipo es C+1 o C-1, pero es que se ha querido simplificar. Después de obtenida la solución se puede efectuar una comprobación manual.

Con esta función podemos obtener los primeros números que satisfacen una relación doble como la solicitada:

N            Valores de m (duplicado) y p

36          7 2 7 5
60          9 3 9 6
70          9 1 9 5
90          11 4 11 7
126        12 2 12 6
168        15 6 15 9
180        14 1 14 6
198        15 3 15 7
216        17 7 17 10
270        19 8 19 11
286        18 4 18 8
300        18 2 18 7
330        21 9 21 12
378        20 1 20 7
390        21 5 21 9
396        23 10 23 13
450        22 3 22 8
468        25 11 25 14

Por ejemplo, 330=(21+9)(21-10)=(21+12)(21-11) Posee, pues, las dos soluciones pedidas para el valor 21, que era lo exigido.

Vemos que existen muchos ejemplos de una propiedad que parecía más restrictiva, pero este tipo de hechos no se descubren hasta no emprender el estudio.

Si descomponemos estos números en factores primos, observaremos que poseen más de cuatro divisores, lo que propicia que se dé la casualidad que estamos comentando:





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.