En el año 2009 publiqué un pequeño reto sobre cuadrados automórficos
https://hojaynumeros.blogspot.com/2009/05/numeros-automorficos.html
Los
números de la primera columna de la siguiente tabla
son automórficos.
Si los estudias adivinarás pronto qué propiedad tienen para recibir este nombre.
¿Cómo podríamos encontrarlos con una hoja de cálculo? Para construir la tabla
que se incluye se han usado macros, pero se puede prescindir de ellas. Puedes
crear una tabla de números consecutivos y después aplicarles una condición.
Esta tabla es complementaria de la anterior. ¿Qué relación tiene con ella?
La pista que daba la segunda tabla era que a2-a = a(a-1) = N*10
Años más tarde, en 2013, se estudiaron los primos automórficos, que poseen como últimas cifras su número de orden como primo.
https://hojaynumeros.blogspot.com/2013/11/primo-que-tienes-que-ver-con-tu-numero.html
Ahora nos dedicaremos, fundamentalmente, a los números poligonales que sean automórficos. Como los cuadrados son poligonales, incluiremos lo que aparezca de nuevo respecto a la entrada de 2009.
Estos
números poseen una fórmula general, y la usaremos en las búsquedas, y si se
requiere un estudio algebraico, la simplificaremos para cada caso en
particular.
Función de búsqueda
Los
poligonales los tenemos muy estudiados en este blog y están contenidos en
nuestra publicación
http://www.hojamat.es/publicaciones/poligonales.pdf
Las
fórmulas para su formación las puedes estudiar en ella. Aquí las usaremos en su
versión para hojas de cálculo:
Function
poligonal(n, k)
poligonal
= n * (n * (k - 2) - (k - 4)) / 2
End
Function
En ella n es el orden o longitud del “lado” y k el tipo, o número de lados.
Una vez
contemos con esta función podremos buscar los casos automórficos. La plasmamos
así:
Function autopolig(n, k) 'Devuelve el poligonal dado su índice si es automórfico
Dim b, l, u
Dim s$, t$
b = poligonal(n, k) ‘Busca el poligonal
t = ajusta(b) ‘Se convierten los datos a String
s = ajusta(n)
l = Len(s$) ‘Ahora se ve si coinciden las cifras
If s = Right(t, l) Then u = Val(t) else u=0
autopolig = u
End Function
Con esta función podemos buscar poligonales automórficos, a los que llamaremos polimórficos. Con esto se podría dar por terminada la cuestión, porque nos da fácilmente todas las soluciones, pero deseamos estudiar también cada caso por separado. Aquí tenemos algunos listados:
Triangulares: 1, 15, 325, 195625, 43959376, 4106490625,… http://oeis.org/A219253
Cuadrados: , 1, 25, 36, 625, 5776, 141376, 390625, 87909376,
8212890625,… http://oeis.org/A035383
Pentagonales: 1, 35, 925, 585625, 131859376, 12319290625
Estudiaremos ahora cada tipo en particular para casos interesantes.
Triangulares
En el caso
de los triangulares el automorfismo se puede expresar con su fórmula clásica
N(N+1)/2:
N(N+1)/2 = N
módulo 10m siendo m el número de cifras de N
Lo podemos
expresar de forma más sencilla:
N(N+1)-2N=N2+N-2N=N2-N=N(N-1)
= 0 (mod 10m
Por
ejemplo, 325 es automórfico, porque su número de orden es 25, y se cumple que 25(25-1)=25*24=600,
que es múltiplo de 102, siendo 2 el número de cifras de 25
Tenemos listado de estos
números: 1, 15, 325, 195625, 43959376, 4106490625, 396606890625,
25271617109376, 83084112890625, 22661209212890625, 1596879961787109376, 3344565630081787109376,
1795096118003159918212890625
Vemos que el problema se vuelve algo intratable. Con la propiedad anterior se puede abordar con hoja de cálculo sin gran coste de tiempo. Usamos la función siguiente, similar a la general, en la que hemos integrado la condición modular:
Function trimorfico(n)
Dim a, b, u, l
Dim s$, t$
a = numcifras(n)
If n * (n - 1) Mod 10 ^ a = 0 Then
b = n * (n + 1) / 2
t = ajusta(b)
s = ajusta(n)
l = Len(s$)
If s = Right(t, l) Then u = Val(t) Else u = 0
End If
trimorfico = u
End Function
Con algunos segundos de tiempo se consiguen varios términos:
Esto anima
a intentar el mismo proceso con PARI. El código es algo complejo:
issub(vv,
v) = {for (i=1, #v - #vv + 1, if (vector(#vv, k, v[k+i-1]) == vv, return(1));
); }
substring(ss,s)={my(vv=Vec(ss),v=Vec(s));return(issub(vv,v))}
trimorf(n)={my(a,b,u=0,l,s="",t="");a=#Str(n);if(n*(n-1)%10^a==0,b=n*(n+1)/2;t=Str(b);s=Str(n);u=substring(s,t));if(u>0,return(b))}
for
(i=1,10^7,m=trimorf(i);if(m>0,print(m)))
Con él se llega más lejos que con hoja de cálculo:
Este ejemplo ilustra la conveniencia de una condición previa para acelerar la velocidad de un algoritmo.
Cuadrados
Con este ejemplo comenzamos el tema en el año 2009. Lo completamos ahora.
Podemos usar
la función autopolig con la fórmula
n^2, pero merece la pena buscar una condición como procedimos con los
triangulares:
N2
= N módulo 10^m siendo m el número de cifras de N
N2-N=N(N-1)
= 0(mod 10m
Resulta la
misma condición que para los triangulares. En realidad, es similar a la
condición de exigir que N termine en una de las cifras 1, 5 o 6, que son las
únicas terminaciones que coinciden con sus cuadrados.
Si
cambiamos n*(n-1)/2 por n^2 en la función anterior nos resultan bien las
soluciones para cuadrados:
Los valores de N coinciden con los primeros de los publicados en http://oeis.org/A003226: 1, 5, 6, 25, 76, 376, 625, 9376, 90625, 109376, 890625, 2890625, 7109376, 12890625, 87109376, 212890625, 787109376, 1787109376, 8212890625, 18212890625, 81787109376, 918212890625, 9918212890625, 40081787109376, 59918212890625, 259918212890625, 740081787109376
Los valores de N2 los podemos lograr con la misma
sustitución en el código PARI:
Otros poligonales
Antes de pasar a algunos casos particulares, es fácil
plantear que la condición en la que coinciden triangulares y cuadrados es
válida para otros poligonales:
N2-N=N(N-1)
= 0(mod 10m
Es sencilla su justificación, basada en la fórmula general
del poligonal de lado n y número de lados k:
P(n,k)=n(n(k-2)-(k-4))/2
Con ella se justifica fácilmente:
N(N*(k-2)-(k-4)/2=N mod 10m
(k-2)N2-(k-4)N=2N mod 10m
(k-2)(N2-N)=0 mod 10m
Si k-2 es
primo con 100 (sin factores 2 y 5) vale el criterio para todos esos
poligonales, y en ellos se simplifica la búsqueda con seguridad, aunque
aparecerán otros casos.
Pentagonales
La fórmula de los números pentagonales (además de la general
para poligonales usada en autopolig)
es (3n2-n)/2. Podemos aplicarle el filtro del módulo, porque
k-2=5-2=3 en este caso, primo con 10. El resultado, tanto con ese filtro como
sin él, es el mismo:
1, 35, 925, 585625, 131859376, 12319290625,…
Con la adaptación a PARI se llega más lejos en la segunda columna:
Los valores de la primera columna cinciden con los de los triangulares, por ser 5-2 primo con 10.
Hexagonales
En estos aparecen más casos, porque k-2=6-2=4 no es primo
con 10. Por esa abundancia, el algoritmo autopolig
funciona con más rapidez:
Los valores de N están publicados en http://oeis.org/A039594 y los de HEX(N) en http://oeis.org/A038494
Soluciones universales
1, 5, 25, 625, 9376, 90625, 890625, 7109376,…
Si recorres con autopolig
los distintos tipos de poligonales, verás que estos valores pertenecerán a
todos ellos. Por ejemplo, creamos la sucesión para decágonos (k=10):
1, 5, 6, 25, 26, 50, 51, 75, 76, 125, 126, 250, 251, 375, 376, 500, 501, 625, 626, 750, 751, 875, 876, 1876, 2500,
2501, 3125, 4376, 5000, 5001, 5625, 6876, 7500, 7501, 8125, 9376, 15625, 25000, 25001, 34376,
40625, 50000, 50001, 59376, 65625, 75000, 75001, 84376, 90625, 109376, 140625, 250000, 250001, 359376, 390625, 500000,
500001, 609376, 640625, 750000, 750001, 859376, 890625, 2109376, 2500000, 2500001, 2890625, 4609376, 5000000,
5000001, 5390625, 7109376, 7500000,
7500001, 7890625, 9609376,…
Figuran en negrita los valores universales, que pertenecen
a todas las sucesiones dependientes de poligonales. Es un interesante
resultado. Por ejemplo, en esta tabla figuran el número de lados k y los
poligonales correspondientes al 9376:
Todos terminan en las cifras 9376.