El día 26 de marzo de 2021 publiqué esta igualdad de tipo palindrómico:
26321=16*5*61+16561+16*5*61
La triple repetición simétrica de las cifras 16561 es muy atractiva, e invita a descubrir casos similares. En principio se pueden considerar dos variantes de la cuestión. La primera seguiría el modelo del ejemplo, con un número impar de cifras y un capicúa central. Como ocurre en 125=1*2*1+121+1*2*1. La segunda consistiría en un esquema que prescinda de ese elemento central en cada sumando, como es el caso de 261=9*9+99+9*9.
La construcción de una lista con los primeros números que se siguen un esquema de este tipo no es difícil. La lista de los primeros del tipo AB*C*BA+ABCBA+AB*C*BA es la siguiente:
Con
paciencia y una calculadora se puede ir construyendo. Lo interesante es
descubrir soluciones para otro rango distinto, en el que el orden natural no
ayude mucho. La siguiente tabla, a partir del número 50000, demuestra que los
resultados no son ya tan previsibles:
Función “PALINTRI”
Para construir un algoritmo adaptado a nuestra búsqueda, parece conveniente fijar como datos de entrada un número N, que es el que se quiere representar así, y dos parámetros, ka y kb, que representarían el número de cifras de cada elemento del esquema. Si uno de ellos es nulo, produciría variantes, como las dos que se han presentado en el párrafo anterior. Si kb=0 se entenderá que no hay elemento central.
La fijación del número de cifras parece aconsejable, porque aparecen más ejemplos de los previstos. Por ejemplo, con cinco cifras, dos cifras para los elementos laterales y una para el central, aparecen 416 ejemplos, desde 13229=12*2*21+12221+12*2*21 hasta 99974=64*6*46+64646+64*6*46. Incluso existen dos números que presentan dos soluciones:
46006=41*4*14+41414+41*4*14=26*6*62+26662+26*6*62
97925=58*4*85+58485+58*4*85=39*8*93+39893+39*8*93
La organización de la búsqueda se basará en la variable a1, que representará a la parte lateral, con su simétrico a2, y su número de cifras ka. Así, en el ejemplo anterior a1=58, a2=85 y ka=2. Exigiremos que a1 sea distinto de a2 si tienen al menos dos cifras, para evitar trivialidades.
Procederemos de la misma forma con la parte central, llamando b a su valor, con la condición de que sea capicúa, y kb a su número de cifras. En el ejemplo b=4 y kb=1.
Con estas variables, y en sistema de numeración decimal, el valor de N quedaría:
N=2*a1*a2*b+a2+b*10^ka+a1*10^(ka+kb)
En el ejemplo:
97925=2*58*85*4+85+4*100+58*1000
En esta expresión nos basaremos para construir el algoritmo.
Para evitar búsquedas inútiles deberemos contar con que 2ka+kb es una buena cota inferior para las cifras de N.
Si b=1
y kb=0 porque no se usa término central, la expresión se simplifica mucho:
N=(2*a1+1)*a2+a1*10^ka
Como ejemplo, 3804=23*32+2332+23*32 y se cumple:
3804=(2*23+1)*32+23*100=1504+2300=3804
Si integramos las dos expresiones en una misma función, su código será algo más largo de lo habitual, pero merece la pena.
Las ideas anteriores están plasmadas en la siguiente función. Se han integrado las dos versiones del problema. La división se basa en si kb es mayor que cero o no:
Function
palintri$(n, ka, kb)’Parámetros N y número de cifras
Dim kn, a1, a2, b, m, c, b1, aa1
Dim s$, t$
s =
""’Contenedor de resultados
c = 0 ’Contador
de resultados
If kb
> 0 Then ‘Caso con elemento central
If kb
= 1 Then b1 = 1 Else b1 = 10 ^ (kb - 1) + 1 ‘Origen
de búsquedas
For b
= b1 To 10 ^ kb – 1 ‘Cifras centrales
If
escapicua(b) Or kb = 1 Then ‘La variable b ha de ser
capicúa
If ka = 1 Then aa1 = 1 Else aa1 = 10 ^ (kb - 1) + 1’ Origen de a
For a1
= aa1 To 10 ^ ka – 1 ‘Búsqueda de a
a2 =
cifrainver(a1) ‘Simétrico de a
If a1 <> a2 Or ka = 1 Then ‘Condición algebraica
m = 2
* a1 * a2 * b + a2 + b * 10 ^ ka + a1 * 10 ^ (ka + kb)
If m =
n Then ‘Hay solución
c = c
+ 1 ‘Se comunica solución
t =
ajusta(a1) + "*" + ajusta(b) + "*" + ajusta(a2)
s = s
+ " ## " + t + "+" + ajusta(a1) + ajusta(b) + ajusta(a2) +
"+" + t
End If
End If
Next a1
End If
Next b
Else ‘
Segunda
variante, sin elemento central
If ka = 1 Then aa1 = 1 Else aa1 = 10 ^ (ka - 1) + 1
For a1 = aa1 To 10 ^ ka – 1 ‘Proceso similar
a2 = cifrainver(a1)
If a1 <> a2 Or ka = 1 Then
m = (2 * a1 + 1) * a2 + a1* 10 ^ ka
If m = n Then
c = c
+ 1
t =
ajusta(a1) + "*" + ajusta(a2)
s = s + " ## " + t + "+" +
ajusta(a1) + ajusta(a2) + "+" + t
End If
End If
Next a1
End If
If s <> "" Then s = ajusta(c) + "
: " + s Else s = "NO"
palintri
= s
End
Function
En un buscador jugaremos con los parámetros para conseguir los resultados adecuados. Por ejemplo, estos son los primeros números de 4 cifras del tipo A*A’+AA’+A*A’
Persiste el problema del 0 inicial que suprime Excel, pero se entiende bien.
De igual forma, se detectan los números del tipo A*BB*A’+ABBA’+A*BB*A’:
VERSION PARI (para la primera variante)
Si
deseamos más rango de soluciones puede ser útil la versión en PARI. La hemos
diseñado para que devuelva sólo a1 y b, porque el resto se completa
fácilmente. Su código es
ori(k)=my(m=1);if(k>1,m=10^(k-1)+1);m
simetrico(n)=eval(concat(Vecrev(Str(n))))
palind(n)=n==simetrico(n)
palintri1(n,ka,kb)=my(a1,a2,v=[ka,kb],b,m,es=0);for(b=ori(kb),10^kb-1,if(palind(b)||kb==1,for(a1=ori(ka),10^ka-1,a2=simetrico(a1);if(a1<>a2||ka==1,m=2*a1*a2*b+a2+b*10^ka+a1*10^(ka+kb);if(m==n,v[1]=a1;v[2]=b;es=1;print(n,"
es ",v[1],", ",v[2]))))))
for(i=10000,20000,if(palintri1(i,2,1),print(i)))
Basta cambiar la última línea según
nuestras preferencias. Tal como está, repetiría la búsqueda efectuada con
Excel. Este es un fragmento:
Por ejemplo, 16537=14*2*41+14241+14*2*41
VERSION
PARI (para la segunda variante)
ori(k)=my(m=1);if(k>1,m=10^(k-1)+1);m
simetrico(n)=eval(concat(Vecrev(Str(n))))
palind(n)=n==simetrico(n)
palintri2(n,ka)=my(a1,a2,v=[ka,ka],m,es=0);for(a1=ori(ka),10^ka-1,a2=simetrico(a1);if(a1<>a2||ka==1,m=(2*a1+1)*a2+a1*10^ka;if(m==n,v[1]=a1;v[2]=a2;es=1;print(n,"
es ",v[1],", ",v[2]))));es
for(i=1000,9999,if(palintri2(i,2),print1("")))
Coinciden los resultados con los de Excel.
Por ejemplo, 3613=16*61+1661+16*61
Con más cifras
Finalizamos con ejemplos que presentan más
cifras en su desarrollo. Todos ellos se podrían encontrar realizando bucles
para sus componentes, pero aquí se prefieren funciones para poder elegir el
rango de búsqueda de N, y no los de sus componentes.
Seis cifras del tipo AB*CC*BA+ABCCBA+AB*CC*BA:
Comprobamos uno: 173173=12*88*21+128821+12*88*21
Es curioso que el resultado sea una concatenación de 173
consigo mismo.
Con cinco cifras y tres centrales
Este es un rango de soluciones obtenidas con Excel:
Así podríamos seguir.
No hay comentarios:
Publicar un comentario