lunes, 20 de abril de 2026

Números primos de Pierpont y sus relacionados


Hay ya bastantes publicaciones e ideas sobre los primos de Pierpont. A pesar de ello, aún se puede volver a estudiarlos desde la forma de trabajar en este blog y las herramientas disponibles. Además, son interesantes los números directamente relacionados con ellos, como los de Mersenne, Fermat o Proth 

Definición y primeras consecuencias

Un número primo de Pierpont es un número primo de la forma 2u3v+1, donde u y v han de ser enteros no negativos. Esto nos lleva a consideraciones muy sencillas:

El exponente u no puede ser cero, pues la expresión sería par y, por tanto, no representaría a un número primo. De hecho, si v=0, deberá ser potencia de 2. La razón está en que una suma de potencias impares es divisible entre la suma de sus bases. Por ejemplo, (X5+y5)/(x+y)=x4-x3y+x2y2-xy3+y4. Si el exponente poseyera un factor primo distinto de 2, podríamos descomponer la potencia como “potencia de potencia”, y aislar el número impar. Por ejemplo 212 se podría expresar como 22 y luego elevado a 3, con lo que construiríamos una suma de potencias impares, y no podría ser primo. Todo este razonamiento nos lleva a que si v=0, los primos de Pierpoint serían también de Fermat. Más adelante regresaremos a esta idea.

El exponente v, si no es nulo, como también lo es u, convertiría al primo de Pierpoint en uno del tipo 6k+1, y posible elemento mayor de un par de primos gemelos. Otra vía para desarrollar más adelante.

Obtención de estos primos

Con las herramientas que se suelen usar en este blog es relativamente fácil encontrar los primeros primos de Pierpont. La primera idea es construir una tabla de doble entrada, una para 2u y otra para 3v, y combinarlas:

Interfaz de usuario gráfica, Tabla, ExcelEl contenido generado por IA puede ser incorrecto.

Por motivos como este sigo usando las hojas de cálculo, porque toda la tabla se genera con la fórmula siguiente y sus extensiones a derecha y abajo:

=SI(ESPRIMO(2^D$3*3^$C4+1);2^D$3*3^$C4+1;"")

Esta concurrencia entre dos potencias también se puede lograr con mi herramienta CARTESIUS

(https://www.hojamat.es/sindecimales/combinatoria/herramientas/herrcomb.htm#cartesius)

Su gestión no es fácil a veces, por lo que no acudo mucho a ella en lo que publico, pero en este caso demuestra su versatilidad. Basta darle las condiciones siguientes:

XTOTAL=2
XT=0..10
VALOR(2^X1*3^X2+1):PRIMO

Nota: Es posible que cuando se publique esta entrada aún no se haya implementado la condición VALOR, que es una mejora del año 2026.

Vienen a significar que combinaremos dos variables de 0 a 10, y que exigiremos que la expresión del paréntesis abajo (definición de primo de Pierpoint) debe ser un número primo. Su respuesta es (solo los primeros casos):

Aparecen los primos pedidos, pero desordenados. Por eso es preferible el procedimiento que elegiré en el siguiente apartado.

Caracterización de estos números

La segunda idea que se nos puede ocurrir es la de anidar dos bucles, uno con potencias de 2 y otro con las de 3, y filtrar los resultados con la condición ESPRIMO. Tendría el inconveniente de resultar un proceso largo y poco eficiente si deseamos manejar rangos de números grandes. Es preferible pensar en una función que nos determine si un número concreto es o no primo de Pierpont.

Para abordar esta función es bueno recordar el concepto de valuación de un número respecto a otro (ver https://hojaynumeros.blogspot.com/2012/12/volvemos-visitar-al-mayor-divisor-impar.html), y es el número de veces consecutivas que un número puede ser dividido por otro. Por ejemplo, VALUACIÓN(162,3)=4, porque 162 es divisible entre 34.

En este caso, si P es de Pierpont, la valuación de P-1 para el 2 es el exponente u y la del 3 el v. Así, el criterio para saber si un número primo es de este tipo se podría expresar como

P-1=2^valuacion(P,2)*3^valuación(P,3)

En el lenguaje PARI ya viene implementada como valuation, y el criterio total sería:

p-1==(2^valuation(p-1,2))*(3^valuation(p-1,3))&&isprime(p)

Lo escribimos como un bucle con inicio y final y así logramos identificar los primos deseados dentro de un rango (inicio, final)

inicio=1;final=10000;for(p=inicio,final,if(p-1==(2^valuation(p-1,2))*(3^valuation(p-1,3))&&isprime(p),print1 (i,", ")))

Con él se consiguen fácilmente los primeros primos de Pierpont:

2, 3, 5, 7, 13, 17, 19, 37, 73, 97, 109, 163, 193, 257, 433, 487, 577, 769, 1153, 1297, 1459, 2593, 2917, 3457, 3889, …

Están publicados en https://oeis.org/A005109, y en esa página se pueden consultar variantes de esta idea.

Se conjetura que existen infinitos números de este tipo, pero no se ha demostrado.

Búsqueda con hoja de cálculo

En una hoja se pueden desarrollar varios aspectos, y quedan muy claros los detalles. Poseo una sencilla versión en VBASIC de la valuación:

Function valuacion(n, x) 'halla el exponente de la máxima potencia de x que divide a n

Dim s, v

s = n

v = 0

While esmultiplo(s, x): s = s / x: v = v + 1: Wend

valuacion = v

End Function

La función ESMULTIPLO se puede sustituir por s/x=s\x, que es equivalente

Con ella se puede construir una tabla más extensa de resultados, introduciendo líneas similares a las siguientes en un buscador:

a = valuacion(i - 1, 2)

b = valuacion(i - 1, 3)

 

If i - 1 = potencia(2, a) * potencia(3, b) And esprimo(i) Then

 

Añadiendo detalles, el resultado sería:

TablaEl contenido generado por IA puede ser incorrecto.

Algunos del tipo 6k+1 son primos gemelos con sus anteriores, como 5, 7, 13 o 19.

La ventaja de este método es que podemos ir a un rango más alto. Estos son los primeros primos de Pierpont a partir de 1000:

Imagen que contiene Tabla

El contenido generado por IA puede ser incorrecto.

La aparición de los números de Fermat da lugar a un curioso paralelismo, que no desarrollaré porque ya ha sido bien explicado en otros lugares. Los de Fermat influyen en la construcción de un polígono con regla y compás, mientras los de Pierpoint lo hacen si se usan dobleces de un papel. En Wikipedia se explica de forma clara y breve.

(https://es.wikipedia.org/wiki/N%C3%BAmero_primo_de_Pierpont)

Como anuncié en los primeros párrafos, sólo desarrollaré aspectos en los que sean útiles mis herramientas usuales. El resto de cuestiones es muy accesible con una buena búsqueda.

Números afines a los primos de Pierpoint

Ya se ha visto su relación con los números de Fermat. También tienen una definición parecida los siguientes:

Primos de Proth

Tienen como definición el ser números primos de la forma k2n+1, con k impar y menor que 2n. Se deduce que algunos de este tipo también serán de Pierpoint, como 31*22+1=13. Cambiando las instrucciones en un buscador de hoja de cálculo tendríamos:

a = valuacion(i - 1, 2)

c = potencia(2, a)

b = (i - 1) / c

 

If b = Int(b + 0.00001) And b < c And i = b * c + 1 And esprimo(i) Then

Resultado:

Serán también primos de Pierpoint aquellos en los que K sea potencia de 3 (incluido el 1).

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

Es muy fácil encontrar sus propiedades.

 Primos de Pierpoint de segunda clase

Podemos cambiar la definición de los primos de Pierpoint caracterizándolos como 2u3v − 1.

La caracterización de estos números pasaría por usar la valuación respecto a 2 o a 3 del número p+1 en lugar de p-1.

Como ya están publicados en https://oeis.org/A005105, es trabajo inútil volver a repetir cálculos ya conocidos. Los primeros son:

2, 3, 5, 7, 11, 17, 23, 31, 47, 53, 71, 107, 127, 191, 383, 431, 647, 863, 971, 1151, 2591, 4373, 6143, 6911, …

En este listado, los elementos con v distinto de cero, serán del tipo 6k-1. Si v=0, no es aquí necesario que u sea potencia de 2, y así , podemos encontrar entre ellos primos de Mersenne, del tipo 2k-1 con k primo. En el listado podemos identificar 3, 7, 31 y 127.

Se podría pensar aquí también en los números del tipo 6n-1, pero son todos múltiplos de 5, lo que nos lleva a que u ha de ser distinto de v.

 

 

 

martes, 7 de abril de 2026

Solución única

En mis cálculos diarios y búsquedas en este blog no ha sido frecuente encontrar solución única a algunas de las cuestiones. En general, aparecen varias o ninguna, pero pocas veces una sola solución. Un ejemplo que busco a diario es el de descomponer un número como suma de un primo y un cuadrado distinto de cero. Normalmente aparecen tantas soluciones que no caben en pantalla, y sólo en contados casos, obtengo tres o cuatro nada más. Son números de cuatro a seis cifras, y era esperable esa cantidad. Sin embargo, con números menores se obtienen frecuentemente soluciones únicas.


 
Suma de cuadrado y primo

Estos son algunos ejemplos de solución única con cuadrados y primos:

19=4^2+3, 22=3^2+13, 24=1^2+23, 26=3^2+17, 29=4^2+13, 36=5^2+11

¿Hasta dónde llegará esa posibilidad? Lo iré viendo en algunos casos. Normalmente van escaseando las soluciones de una búsqueda, y. a veces, los autores terminan con una conjetura: “Para números mayores que 10^17 no se observan soluciones…”. Se queda ahí la cuestión hasta que alguien pueda demostrarlo. Eso haré en esta entrada si es necesario.

He comenzado con hoja de cálculo, y hasta el 70000 aparecen soluciones únicas con una frecuencia mínima, pero apreciable. Estos son los casos entre 50000 y 70000:



A partir de aquí, deberé ensayar con PARI, que, como ya es sabido, maneja mejor los números grandes. He construido este código:

primomascuad(n)=my(s=List(),m=0,r=sqrt(n),p);for(i=1,r,p=n-i^2;if(isprime(p),m+=1;listput(s,i);listput(s,p)));s

for(i=50000,70000,s=primomascuad(i);if(#s==2,print(i,", ",s)))

La primera parte imita una función antigua que poseo para hoja de cálculo. Recorre todos los cuadrados menores que el número y busca aquellas diferencias que sean número primo. Las que lo son se incorporan a una lista, formada por cada base de cuadrado y cada primo. En la última línea, la igualdad #s==2, admite sólo aquellas listas con una sola solución (dos números). En el rango 50000 a 70000 coincide con VBASIC, en otro formato de presentación:

 


Es de esperar que en rangos mayores vayan escaseando las soluciones, pero me ha sorprendido que no parecen desaparecer.

Del 10000 al 20000 aparecen 28, y llama la atención 10000=992+199.

En los siguientes rangos del mismo tamaño van disminuyendo las frecuencias a 9, 12, 9, 7, 6, 5, 6, 7, 6, 4, 3, 3, 5, 2, 4, 3, 4, 4, … hasta llegar al 200000-210000 en el que aparecen 2.

Estoy acostumbrado a estos resultados, similares a los de los “sucesos raros” en Estadística, y puede ocurrir que lleguemos a intervalos con ningún resultado. Por ejemplo, en el rango 2000000-2100000, que es diez veces más amplio, obtenemos 9.

Si alguien tiene más paciencia que yo, es posible que llegue a una potencia de 10 en la que ya no aparezcan casos. Siempre será una conjetura lo que descubra.

 Suma de cuadrado y capicúa

También esta búsqueda la emprendo casi a diario. Suele proporcionarme de dos a cuatro soluciones, y sería interesante encontrar números con solución única. Basta leer mi entrada https://hojaynumeros.blogspot.com/2017/10/suma-de-cuadrado-y-capicua.html para entender que deberemos fijar en 1 el número de soluciones. En la tabla que he elaborado he suprimido los capicúas de una sola cifra, porque restan interés a la búsqueda, por su abundancia. Contiene los primeros números con esta propiedad a partir del 2000:

 


 Suma de dos simétricos

Este es un ejemplo similar a los anteriores, en el que no hay una teoría que nos respalde, y es inevitable acudir a la búsqueda. En este blog hemos usado la función CIFRAINVER, que devuelve el simétrico de un número (ver, por ejemplo, https://hojaynumeros.blogspot.com/2022/04/relaciones-entre-numeros-con-cifras.html)

Para que la búsqueda no esté contaminada por ejemplos triviales, se exigirá que el número no sea múltiplo de 10, para evitar que el simétrico pierda una cifra. También deberá ser el primer sumando mayor que el segundo, y así evitar que una suma aparezca dos veces. Son condiciones que no son necesarias, pero pulen un poco los resultados.

Usaré esta función:

Function dossimetricos$(n)

Dim i, m

Dim s$

 

s = ""

m = 0 ‘Contenedor s y contador m

For i = 1 To n

p = cifrainver(i)

If i + p = n And i > p And i Mod 10 <> 0 Then m = m + 1: s = s + " = " + ajusta(i) + "+" + ajusta(cifrainver(i)) ‘Hay solución

Next i

If s = "" Then s = "NO" Else s = ajusta(m) + ": " + s

dossimetricos = s

End Function

 

Al comenzar la salida de la función con el número de soluciones, es fácil identificar los números que poseen una. Para mi uso diario basta con este código, pero en esta búsqueda, para que sea interesante, desecharé las soluciones en las que ambos sumandos simétricos sean iguales.

Los primeros que aparecen con estas condiciones son:

 

 


Observamos que presentan una frecuencia apreciable.

 Resultados ciertos

En los anteriores ejemplos, la aparición de números con una sola descomposición se dejó en simple posibilidad para rangos de un número grande en adelante. En otros ejemplos se tiene la certeza de los números que presentan un solo resultado. Repaso brevemente algunos estudiados en este blog.

Primos del tipo 4k+1

Son los llamados también primos pitagóricos. Se estudiaron aquí (ver https://hojaynumeros.blogspot.com/2025/11/primos-pitagoricos.html) y se explicó que sólo admiten una descomposición en una suma de cuadrados. Por ejemplo, 12037 es primo de este tipo, y sólo admite la descomposición 12037=742+812

Una sola ocasión de ser hipotenusa

Estudiamos este tema en la entrada https://hojaynumeros.blogspot.com/2025/10/en-cuantas-ternas-pitagoricas-1.html

Según lo visto en ella, los números que contengan un solo factor primo del tipo 4k+1 y el resto (salvo el 2, que no influye) elevados a una potencia par, son los únicos que podrán ser hipotenusas en una terna pitagórica. Como en la terna figura al cuadrado, la condición de exponente par no influye. Así nos queda como condición que exista solo un factor del tipo 4k+1.

En la tabla siguiente figuran soluciones a partir de 1200 y se puede comprobar que solo presentan un factor del tipo 4k+1 elevado a 1:

 


 Una sola ocasión de ser cateto

Esta cuestión también puede producir resultados seguros, sin conjeturas para números grandes. Puedes leer mis entradas

https://hojaynumeros.blogspot.com/2025/10/en-cuantas-ternas-pitagoricas-2.html

https://hojaynumeros.blogspot.com/2017/01/numero-de-descomposiciones-en.html

En ellas se explica que todo depende de las formas de descomponer N2 en productos de la misma paridad. Remito a ellas. Un caso particular es el de los primos impares. En la tabla siguiente observamos las soluciones en el mismo rango del párrafo anterior:

Resultan primos y semiprimos con el factor 2, pero lo que nos interesa es que existe un procedimiento seguro. Siempre es preferible a la necesidad de acudir a una búsqueda.

jueves, 12 de marzo de 2026

Números que son promedio de dos cuadrados

Hace años que vengo publicando estudios y búsquedas en las que es necesario descomponer un número en dos cuadrados. Desde Fermat conocemos la condición de que un número primo deba ser para ello del tipo 4k+1, ya que los contrarios, de forma 4k+3 no admiten esta descomposición.

Gauss estudió el tema y aportó una fórmula para conocer en cuántas sumas de cuadrados se descompondría un número concreto, y que resultó depender del número de factores primos de un tipo y otro que figuraran en la descomposición.

Puedes consultar esa fórmula, por ejemplo, en

https://hojaynumeros.blogspot.com/2024/03/potencias-equidistantes-de-cuadrados.html.

En ella el factor 2 en un número no influye en el número de descomposiciones esperadas, sino de los tipos 4k+1 y 4k+3 presentes.

Lo que explico en el párrafo anterior nos hace ver que si N se descompone en dos cuadrados, también lo hará 2N, ya que la presencia del 2 no influye en el resultado. Por ejemplo:

850=2*52*17=32+292=112+272=152+252

Si lo multiplicamos por 2, deberían aparecer también tres sumas de cuadrados, y así es:

1700=22*52*17=102+402=162+382=262+322

Si ahora divido las igualdades correspondientes a 2N entre 2, resultarán las formas de expresar N en promedios de dos cuadrados:

850=(102+402)/2=(162+382)/2=(262+322)/2

En realidad, estamos ante una situación algebraica, ya que si N=a2+b2, se tendrá que (a+b)2+(a-b)2=2(a2+b2)=2N

En efecto: 13+25=40, 25-15=10, que son las primeras soluciones para el promedio, 27-11=16 y 27+11=38, las segundas, y, por último, 29-3=26, 29+3=32.

Estos razonamientos sugieren que basta descomponer 2N en dos cuadrados para que aparezca una solución de promedios para N y que el número de soluciones será el mismo. No es difícil encontrar una función que realice este trabajo. Otra orientación es la de buscar todos los cuadrados C menores que N y ver si N+C es cuadrado. No se tienen en cuenta los promedios en los que los dos sumandos son iguales, lo que se considera solución trivial.

Como aquí se trata de comprender y practicar, copio las dos posibilidades:

Buscar si N+C es cuadrado:

Function entredos$(n)

Dim i, r, a, b, m

Dim s$

 

s = "" 'La solución se expresa como texto

m = 0 ‘Contador de soluciones

r = Int(Sqr(n)) 'Primer valor a ensayar

i = r - 1

While i > 0  'Descendemos valores de cuadrados

b = n - i ^ 2 'Diferencia entre potencia y cuadrado

a = n + b 'A la potencia le sumamos la diferencia

If escuad(a) Then m = m + 1: b = Sqr(a): s = s + " = (" + ajusta(i) + "^2+" + ajusta(b) + "^2)/2" ‘Si es cuadrado, hay una solución nueva

i = i - 1

Wend

If s = "" Then s = "NO" Else s = ajusta(m) + " : " + s

entredos = s 'Si no hay solución, la respuesta es “NO”

End Function

 

Descomponer 2N en suma de dos cuadrados

Public Function entredos2(n) As String

Dim x, p, m, c

Dim s$

 

s$ = "": m = 0’ Contenedor y contador

For x = 1 To Sqr(2 * n - 1)

c = x * x ‘Primer cuadrado para 2N

p = 2 * n – c ‘Posible segundo cuadrado

If escuad(p) And p <= c Then

s$ = s$ + "=(" + ajusta$(x) + "^2+" + ajusta$(Sqr(p)) + "^2)/2": m = m + 1 ‘Hay solución y avanza el contador

End If

Next x

If s$ = "" Then s$ = "NO" Else s$ = ajusta(m) + "::" + s$

entredos2 = s$ ‘Presentación de resultados

End Function

 

En la siguiente tabla se puede observar la concordancia entre los dos métodos, en un rango elegido al azar:


Evidentemente, faltan aquellos números que no admiten descomposición, por contener factores primos del tipo 4k+3 elevado a exponente impar. Son ejemplos 135=33*5, 151, primo tipo 4k+3, o 144=24*32, en el que, al ser cuadrado presentaría la solución trivial

 (122+122)/2.

 Los primeros números que admiten ser iguales a un promedio de cuadrados son:

5, 10, 13, 17, 20, 25, 26, 29, 34, 37, 40, 41, 45, 50, 52, 53, 58, 61, 65, 68, 73, 74, 80, 82, 85, 89, 90, 97, 100, 101, 104, 106, 109, 113, 116, 117, 122, 125, 130, 136, 137, 145, 146, 148, 149, 153, 157, 160, 164, 169, 170, 173, 178, 180, 181, 185, 193, 194, 197, 200, …

Con otra definición equivalente están publicados en https://oeis.org/A004431, y en un comentario aparece el promedio de dos cuadrados. Son interesantes los comentarios y alguna programación en PARI.

 

Diferencias prefijadas

Las diferencias entre las bases de los cuadrados que sean solución, han de ser pares, para que su suma sea par, ya que su resultado es 2N.

Podemos seleccionar entre las soluciones aquellas que posean una diferencia determinada, a la que llamaremos 2D por ser par. Conociendo ese dato, es fácil dar un criterio para saber si N admite ser promedio de dos cuadrados cuyas bases se diferencien en 2D. Comenzaríamos así:

Sería k2+(k+2d)2=2N

2k2+4dk+4d2=2N

k2+2dk+2d2=N, es decir, la ecuación de segundo grado en k:  k2+2dk+(2d2-N)=0

En la página enlazada se sirven de esta fórmula para definir estos números.

Para que exista solución entera, el discriminante d2-2d2+N=N-d2 deberá ser cuadrado. Ese sería el criterio.

Un número N admitirá ser promedio de dos cuadrados diferenciados en 2d si N-d2 es cuadrado

Por ejemplo, en la tabla se observa que 130 admite las diferencias 6 y 14, y esto es porque 130-32=121, cuadrado de 11, y 130-72=81, cuadrado de 9. Implemento en un buscador, con un rango similar y obtengo: 113, 130, 149, 170, 193, …Los números 130 y 149 son los que presentan diferencia 14 en la tabla.

 

La expresión N=k2+2dk+2d2 nos permite encontrar las mismas soluciones para números que sean promedio de dos cuadrados. Basta plantear un doble bucle con k y d. Esta es la versión en PARI:

for(n=1,10,for(m=1,10,p=n^2+2*m*n+2*m^2;print1(p,", ")))

Si la ejecuto en la página oficial de PARI/GP obtengo la solución

5, 13, 25, 41, 61, 85, 113, 145, 181, 221, 10, 20, 34, 52, 74, 100, 130, 164, 202, 244, 17, 29, 45, 65, 89, 117, 149, 185, 225, 269, 26, 40, 58, 80, 106, 136, 170, 208, 250, 296, 37, 53, 73, 97, 125, 157, 193, 233, 277, 325, 50, 68, 90, 116, 146, 180, 218, 260, 306, 356, 65, 85, 109, 137, 169, 205, 245, 289, 337, 389, 82, 104, 130, 160, 194, 232, 274, 320, 370, 424, 101, 125, 153, 185, 221, 261, 305, 353, 405, 461, 122, 148, 178, 212, 250, 292, 338, 388, 442, 500, …

Como era de esperar, aparecen las soluciones desordenadas. Si las ordeno en una hoja de cálculo, coinciden con las obtenidas por otros procedimientos.

5, 10, 13, 17, 20, 25, 26, 29, 34, 37, 40, 41, 45, 50, 52, 53, 58, 61, 65, 65, 68, 73, 74, 80, 82, 85, 85, 89, 90, 97, 100, 101, 104, 106, 109, 113, 116, 117, 122, 125, 125, 130, 130, 136, 137, 145, 146, 148, 149, …

Se observan dos hechos, como son la existencia de repetidos, (65 y 85), y también la falta de alguno en el listado, simplemente porque “tarda más en aparecer”. Por eso, prefiero siempre algoritmos que devuelvan las soluciones ordenadas.

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.