Mostrando entradas con la etiqueta Cifras. Mostrar todas las entradas
Mostrando entradas con la etiqueta Cifras. Mostrar todas las entradas

jueves, 26 de febrero de 2026

La suma de potencias de cifras es otra potencia

En este blog se han desarrollado muchas curiosidades similares, y ahora deseo estudiar en qué números se cumple que una suma de potencias de sus cifras se convierte en otra potencia. Por ejemplo, en el 34, 32+42=52, porque es una terna pitagórica, o en 123 se cumple que 13+23+33=62

Para jugar un poco con esta cuestión necesitamos dos funciones, que son SUMACIFRAS, que nos sume potencias de cifras, y ESPOTENCIA, que determine si un número es potencia entera o no. La primera, en su versión completa con exponentes, la puedes encontrar desarrollada en este blog, por ejemplo, en

https://hojaynumeros.blogspot.com/2024/01/un-numero-y-sus-cifras-1-niven.html.

Posee dos parámetros, el número a descomponer en cifras y el exponente.

La función ESPOTENCIA admite variantes, pero su última versión es algo complicada de desarrollar. Está presentada en la entrada

https://hojaynumeros.blogspot.com/2025/11/un-numero-como-diferencia-entre.html

Si no te apetece entrar en esas explicaciones en VBASIC, con el lenguaje PARI quedan muy simples:

sumacifras(n,k)=sum(i=1, #n=digits(n), n[i]^k)
espotencia(n)=ispower(n)


Función espotsumcifraspot$(n,tope)

Uniremos las dos funciones en una sola, para determinar qué números cumplen la propiedad pedida. Le indicaremos el número y el tope máximo de búsqueda con exponentes, porque los resultados pueden tener una magnitud tan grande que no sean exactos en VBASIC. Por cada solución que se obtenga aparecerán también los números anagramáticos con ella. Por ejemplo, si 115 es solución (12+12+52=33), también lo serán 151 y 511.

 

Public Function espotsumcifraspot$(n,tope)

Dim s, I,e

Dim ss$

 

ss = ""

For i = 2 To tope ‘Se prueba con varios exponentes de cifras

s = sumacifras(n, i)’Sumacifras con un exponente

e= espotencia(s)

If e > 1 Then ss = ss + " E1: " + Str$(i)+ “ E2: “+str$(e)

‘Si la suma es potencia, tenemos solución nueva, E1 exponente de las cifras y E2 el de la suma

Next i

If ss = "" Then ss = "NO"

espotsumcifraspot = ss

End Function

 

Hay que advertir que el valor de E2 no es único, porque, por ejemplo, el número 64 es cuadrado, cubo y sexta potencia. La función te da un valor, para afirmar que es potencia, pero no tiene que coincidir con el esperado.

 

Otra advertencia es que la existencia de cifras nulas puede también producir resultados no esperados. Si se quiere matizar más se puede añadir la condición de que no existan ceros en su representación en base 10. Esta sencilla función devuelve VERDADERO si no existen cifras nulas:

 

Function sinceros(n) As Boolean

Dim h, i, m

Dim sin As Boolean

h = n

sin = True

While h > 9 And sin

i = Int(h / 10)

m = h - i * 10

If m = 0 Then sin = False

h = i

Wend

If h = 0 Then sinceros = False Else sinceros = sin

End Function

 

Es optativo añadirle esa condición al principio de la función. Con la función PRODUCIFRAS basta con exigir que el producto no sea nulo.

La puedes encontrar en

https://hojaynumeros.blogspot.com/2018/09/permutacion-de-cifras-al-sumar-su.html

 

Así lo haremos en PARI: sinceros(n)=vecprod(digits(n))<>0

 

Números con la propiedad esperada

 

Con la advertencia de que puede faltar alguno por la existencia de un tope, la siguiente tabla contiene los primeros números sin cifras nulas que cumplen la propiedad. Llaman la atención los resultados de 22, 44 y 88, que no caben en la imagen (algo fácil de razonar con potencias de 2), y el hecho ya explicado, de que aparecerán como solución todos los números anagramáticos con la primera, como 21 con 12 o 132 con 123.


 

La tabla está confeccionada con tope 10 para los exponentes, pero si uso el 20 aparecen resultados falsos. Ya se sabe lo que se debe hacer: pasar a PARI. Se puede usar este código:

 

sumacifras(n,k)=sum(i=1, #n=digits(n), n[i]^k)

producifras(n)=vecprod(digits(n))

espotsumcifraspot(n,tope)=my(ss=List(),i,e,s,p=producifras(n));for(i=2,tope,s=sumacifras(n, i);e=ispower(s);if(e>1&&p>0,listput(ss,"E1:");listput(ss,i);listput(ss,"E2: ");listput(ss,e)));ss

for(i=11,135,s=espotsumcifraspot(i,30);if(#s<>0,print1(i,", ")))

 

Si aumento el tope a 30 coinciden los resultados, luego puedo confiar en que estos sean válidos:

12, 21, 22, 34, 36, 43, 44, 48, 63, 68, 84, 86, 88, 115, 122, 123, 126, 132,

 

Aumentando el rango:

 

12, 21, 22, 34, 36, 43, 44, 48, 63, 68, 84, 86, 88, 115, 122, 123, 126, 132, 148, 151, 162, 168, 184, 186, 212, 213, 216, 221, 231, 236, 244, 261, 263, 269, 296, 312, 321, 326, 333, 345, 354, 355, 362, 366, 418, 424, 435, 442, 447, 453, 474, 481, 488, 511, 534, 535, 543, 553, 568, 586, 612, 618, 621, 623, 629, 632, 636, 658, 663, 667, 676, 681, 685, 692, 744, 766, 814, 816, 841, 848, 856, 861, 865, 884, 926, 962, 999, …

 

Observamos que presentan una frecuencia alta de aparición, en parte por la existencia de anagramáticos. Por eso se puede plantear un filtro según el exponente usado en las cifras. Cambiando la variable que devuelve la función es posible realizar ese filtro. Para eso he modificado ligeramente el código. Por ejemplo, con resultado cubo aparecen:

 

115, 151, 345, 354, 355, 435, 453, 511, 534, 535, 543, 553, 568, 586, 658, 685, 856, 865, 1134, 1143, 1156, 1165, 1314, 1341, 1413, 1431, 1516, 1561, 1615, 1651, 2234, 2243, 2324, 2342, 2423, 2432, 2667, 2676, 2766, 3114, 3141, 3224, 3242, 3411, 3422, 3468, 3486, 3648, …

Por  ejemplo, 3648 es solución porque 32+62+42+82=53

 

Los he comprobado con dos procedimientos.

 

También podemos buscar exponentes de las cifras. Por ejemplo, buscamos los que sean mayores o iguales que 5, y conseguimos el listado:

 

22, 44, 88, 333, 999, 1111, 1224, 1242, 1339, 1393, 1422, 1933, 2124, 2142, 2214, 2222, 2241, 2412, 2421, 2448, 2484, 2844, 3139, 3193, 3319, 3333, 3391, 3913, 3931, 4122, 4212, 4221, 4248, 4284, 4428, 4444, 4482, 4669, 4696, 4824, 4842, 4966, 5555, 6469, 6496, 6649, 6666, 6694, 6946, 6964, 7777, 8244, 8424, 8442, 8888, 9133, 9313, 9331, 9466, 9646, 9664, 9999, …

 

Nos encontramos con soluciones especiales por la repetición de cifras. Por ejemplo, 3913: 35+95+15+35=2442

 

También podemos fijar qué exponentes deseamos, siempre que adaptemos el código. Por ejemplo, con exponentes 3 y 3 y con cifras crecientes tenemos estos dos casos:

345: Es un resultado clásico: 33+43+53=63

1156: 13+13+53+63=73

 

Con exponentes con bastante diferencia:

 

Con cifras elevadas a 7, el número 57888 y sus anagramáticos cumple:

 

57+77+87+87+87=26822

 

Tenemos las herramientas para seguir investigando, pero vendrían bien unos equipos más potentes para llegar a siete u ocho cifras.

 

 

 

 

 

jueves, 11 de diciembre de 2025

Pandigitales inesperados

Hay varias acepciones de la palabra pandigital. Aquí nos referiremos a los pandigitales completos sin repetición, es decir, que consideraremos pandigitales a aquellos números de 10 cifras en las que figuren todas del 0 al 9 en cualquier orden y sin repetir ninguna. No se admite cero inicial. Excel lo suele suprimir, pero habrá que tener cuidado en otros lenguajes de programación.

Con esta definición es sencillo calcular por Combinatoria cuantos pandigitales de este tipo puede haber. Inténtalo.

Función para detectar pandigitales

Para esta detección se crea un vector de 10 elementos, ci(10), y en cada uno se cuentan las apariciones de una cifra determinada del número. Para que sea pandigital, todos los elementos han de ser iguales a 1. En cualquier otro caso, no lo será.

Función pandigital

Public Function pandigital(a) As Boolean

 

'han de estar todas las cifras sin repetición y sin cero inicial

 

Dim ci(10)’ Contenedor de cifras

Dim i

Dim t As Boolean

 

t = True ‘En principio suponemos que es pandigital

n = numcifras(a) ‘Se puede conseguir también sumando 1 a su logaritmo decimal

If n <> 10 Then pandigital = False: Exit Function ‘No tiene diez cifras

For i = 0 To 9: ci(i) = 0: Next I ‘Contadores a cero

For i = 1 To n

ci(cifra(a, i)) = ci(cifra(a, i)) + 1’ Se cargan las cifras encontradas

If ci(cifra(a, i)) > 1 Then pandigital = False: Exit Function ‘Si hay repetidas, no es pandigital

Next i

s = 0

For i = 0 To 9

If ci(i) = 0 Then t = False ‘Si falta una cifra, no es pandigital

Next i

pandigital = t ‘Devuelve VERDADERO o FALSO

End Function

 

Resultados inesperados

 

La idea de hoy es buscar pandigitales en distintas circunstancias u operaciones. Predominarán productos y potencias, como ejemplos favorables a encontrar pandigitales, pero sólo serán ejemplos de uso para facilitar a los lectores la búsqueda en otros casos similares. Se pueden abordar muchos.

 

Vemos algunos ejemplos con nuestro buscador:

 

Multiplicar un número por otro relacionado

 

A partir de este ejemplo hay que tener en cuenta que los pandigitales están comprendidos entre 10^9=1000000000 y 10^10=10000000000. Sería inútil buscar fuera de este intervalo.

 

Multiplicamos N por N+1

 

En este primer ejemplo, podemos comenzar la búsqueda por RAIZ(10^9)-1, para que N(N+1) entre en ese intervalo. La salida puede ser RAIZ(10^10)+1. Esto no es demasiado importante. Se puede ampliar algo el rango. Nuestro buscador nos da 52 soluciones. Estas son las primeras:



No esperaba tantos resultados. Se ve que el producto de consecutivos tiene características favorables. He probado con N(N+2) y resultan 34. Con N(N+3), 99. Como era de esperar, es algo que resulta aleatorio en la práctica. Con otras diferencias se obtienen números similares.

 

Un número multiplicado por su doble produce resultados parecidos.

 

Uso de potencias

 

Cuadrado de N

 

Si lo reducimos a su cuadrado, es decir un número por sí mismo, está publicado en https://oeis.org/A054038 con otros planteamientos, pero coincide mi buscador para pandigitales sin repetición, que resultan ser 87.

 

Estos son los primeros:

 


Podíamos operar N con N2, a ver qué ocurre.

Con suma aparecen bastantes resultados. Uno es:

40508+40508^2=1640938572

Con cubos no he obtenido ningún pandigital.

Otras potencias

Para las potencias es preferible usar el lenguaje PARI, porque maneja las cifras con más soltura que Excel.

 

El criterio para saber si un número es pandigital puede ser este:

 

vecsort(digits(n))==[0..9] &&n>=10^9

 

Se interpreta fácilmente: se ordenan los dígitos de n en un vector y ha de coincidir con [0..9]. Además, no puede tener cero inicial, ha de ser mayor o igual que 109.

 

Con estas líneas de PARI podemos investigar potencias. Están adaptadas a cuadrados para probar, escribiendo k=2. Cambiando k se pueden investigar otras potencias.

pandigital(n)=vecsort(digits(n))==[0..9]&&n>=10^9

k=2

a=truncate(10^(9/k))

b=truncate(10^(10/k))

for(i=a,b,m=i^k;if(pandigital(m),print(i," , ",m)))

Este es un recorte de pantalla para k=2 en la web de PARI:


Observamos que coincide con el resultado de Excel.

No he encontrado pandigitales en los exponentes del 3 al 10, pero nos ha servido para iniciar el uso de PARI.

Otras búsquedas

Número por su simétrico en cifras

Aquí sí tendremos éxito. En Excel uso mi función CIFRAINVER y en PARI mi función REVERSE. Elijo este porque lo tengo desarrollado más brevemente. Podríamos usar lo siguiente:

pandigital(n)=vecsort(digits(n))==[0..9]&&n>=10^9

reverse(n)=eval(concat(Vecrev(Str(n))))

a=2

b=1000

for(i=a,b,m=i*reverse(i);if(pandigital(m),print(i," , ",m)))

Definimos pandigital y reverse y después multiplicamos el número por su reverso:



Si multiplicas cualquier número de la primera columna por su simétrico, obtendrás el pandigital de la segunda.

Otros ejemplos sin desarrollar

Un número multiplicado por su doble:



Por ejemplo. 22887*45774=1047629538

Cuadrado de N menos N



Así, 44028^2-44028=1938420756

Todos terminarán en 0, 2 o 6.

Y hasta aquí llega el tema. Quedan muchas posibilidades, e incluso eligiendo las primeras cifras de un número real, pero aquí sólo se estudian los enteros.

 

lunes, 26 de mayo de 2025

Repitunos y progresiones geométricas

Existen números, como el 31, que equivalen simultáneamente a dos o más sumas distintas de las primeras potencias de un número natural. En este caso son:

31=1+2+4+8+16
31=1+5+25

Estas igualdades se pueden interpretar como que 31 tiene como expresión un “repituno” en las bases 2 y 5:

31(10 = 11111(2 = 111(5

Ya he usado estos números en entradas antiguas, pero hoy buscaremos los que, como el 31, presentan esta propiedad en dos o más bases distintas.


Equivalencia de sumas de primeras potencias

Este tema se puede tratar de forma algebraica, pero parece preferible la algorítmica, porque además de descubrir qué números son de este tipo se pueden contar las sumas a las que equivalen. Usaré esta función:

Function essumapot$(n) ‘Función string

Dim tope, i, k, m, r

Dim s$

 

tope = Int((Sqr(4 * n - 3) - 1) / 2) ‘Este tope se basa en el caso a=2

r = 0 ‘Número de soluciones

For i = 2 To tope ‘Posibles bases de potencias

k = 1 ‘Primer exponente a probar

m = 1 + I ‘Primera suma de potencias

Do Until m > n

k = k + 1 ‘Siguiente exponente

m = m + potencia(i, k) ‘Siguiente suma

If m = n Then s = s + " # " + ajusta(i) + ", " + ajusta(k): r = r + 1 ‘Hay una solución

Loop

Next i

If s <> "" Then s = ajusta(r) + " ## " + s ‘Se construye la solución

essumapot = s

End Function

 

Con esta función se determina qué números son “repitunos” en alguna base y de cuántas formas. Los primeros detectados son estos:


Se observa que el 31 es suma de potencias de 2 hasta la cuarta y del 5 hasta el cuadrado, como ya sabíamos. La inclusión del número de soluciones al principio nos facilitará las búsquedas.

Están publicados en  https://oeis.org/A053696

Todos son “números brasileños”, como puedes comprobar en la entrada de este blog dedicada a esos números.

https://hojaynumeros.blogspot.com/search?q=brasile%C3%B1os

Lo que nos interesa aquí es la existencia de soluciones múltiples, como en el caso del 31. Bastará buscar las soluciones en las que el primer carácter tenga un valor superior a 1.

Tal como se podía sospechar por anteriores trabajos sobre temas afines, sólo se encuentran dos soluciones, 31 y 8191, ambos primos de Mersenne (31=2^5-1 y 8191=2^13-1. No existen más entre los números menores de 2^44.

Imagen que contiene Calendario

El contenido generado por IA puede ser incorrecto.

Puedes ampliar el tema en https://oeis.org/A119598


Progresiones geométricas múltiples

Estos dos números, 31 y 8191 pueden sea base para encontrar los primeros elementos de progresiones geométricas con el mismo término inicial. Basta elegir un múltiplo de cualquiera de ellos dos.

Por ejemplo, elegimos 31 por 13, es decir, 403. Tomamos 13 como término inicial de una progresión geométrica, y desarrollamos 31 de dos formas distintas, como ya sabemos:

403=13*31=13*(1+2+4+8+16)=13+26+52+104+208

403=13*31=13*(1+5+25)=13+65+325

Hemos expresado el 403 como suma de dos progresiones geométricas. Podemos efectuar idénticas operaciones con múltiplos de 8191. Por tanto:

Existen infinitos números naturales que se pueden expresar como dos sumas distintas de progresiones geométricas con el mismo término inicial.

 
Coincidencia de dos progresiones en general

Si eliminamos la condición de igualdad del término inicial en las progresiones geométricas, el problema sería totalmente distinto, con muchos más parámetros a considerar. En mis cálculos diarios encuentro muchos casos de varias progresiones geométricas que coinciden en su suma. Si quieres experimentar, esta función detecta estas progresiones para razones entre 2 y 9

Function pg$(n) 'Es suma de una o más progresiones geométricas

Dim i, j, a, s

Dim ss$

 

ss = "" ‘Contenedor de soluciones

For i = 2 To 9 ‘Razón de la progresión

j = 1

s = 1 ‘Inicios

While j < 10 And s <= n

s = s + i ^ j ‘Se suma la progresión

a = n / s ‘Posible inicio de la progresión

If a = Int(a) And j > 1 Then ss = ss + "##" + Str$(j + 1) + " sumandos " + Str$(i) + " razón " + Str$(a) + " Inicio"

j = j + 1 ‘Número de sumandos

Wend

Next i

pg = ss

End Function

Con él se pueden detectar sumas múltiples para cualquier número, si es que existen. Por ejemplo, el número 1001 es suma de tres progresiones geométricas distintas:

1001 ## 3 sumandos  2 razón  143 Inicio## 3 sumandos  3 razón  77 Inicio## 3 sumandos  9 razón  11 Inicio

En efecto:

1001=143+143*2+143*4
1001=77+77*3+77*9
1001=11+11*9+11*81

Es claro que cambia el término inicial en cada suma.