El caso de 169=13^2 y 196=14^2 suele llamar la atención por el hecho de que dos elementos consecutivos de una lista tengan las mismas cifras en el sistema de numeración decimal, o lo que es igual que las cifras de uno sean anagramas de las cifras del otro. Hay muchos otros ejemplos de términos de listas que comparten cifras. Por ejemplo, los primos consecutivos 49279 y 49297. Estudiaremos algunos ejemplos de estas coincidencias.
Ya que este puede ser el más popular, comenzamos el estudio
con el caso de cuadrados consecutivos, que, como suele suceder, ya está bien
estudiado. Quienes seguís este blog sabéis que en estos casos nos llama más la
atención los algoritmos o funciones necesarios para búsquedas con hoja de
cálculo o PARI.
Función
CIFRAS_IDENTICAS
Para abordar estas cuestiones disponemos hace años de la
función CIFRAS_IDENTICAS, que efectúa un recuento de las frecuencias de cada
cifra dentro de dos números y las compara para ver si son idénticas o existe
alguna diferencia.
La versión para VBASIC de Excel y Calc puede tener esta
estructura:
Public Function cifras_identicas(m, n) As
Boolean
Dim ci As Boolean
Dim ca(10), cb(10)
While h > 0
i = Int(h / 10)
s = h - i * 10 ‘Se extrae cada cifra
h = i
ca(s) = ca(s) + 1 ‘Se acumulan las
frecuencias
Wend
While h > 0
i = Int(h / 10)
s = h - i * 10
h = i
cb(s) = cb(s) + 1
Wend
For i = 0 To 9
If ca(i) <> cb(i) Then ci = False ‘Si
dos frecuencias son distintas, es falso
Next i
cifras_identicas = ci
End Function
Si alteramos alguna frecuencia, nos devolverá FALSO:
Hemos tenido que construir una función de forma algo
compleja, porque el lenguaje VBASIC no da mucho de sí. La función que usamos
tendría este otro código en PARI:
Con la función para hojas de cálculo podemos comparar cada cuadrado con su siguiente. Mediante un bucle de búsqueda o dos columnas de Excel podemos ir comparando N^2 con (N+1)^2 y ver si las cifras son idénticas o no:
Hemos recorrido los primeros números y comparado
las cifras entre su cuadrado y el cuadrado siguiente, y se ha obtenido esta
tabla:
Los primeros cuadrados con esta propiedad están publicados en http://oeis.org/A227692
169, 24649, 833569,
20367169, 214534609, 368678401, 372142681, 392554969, 407676481, 771617284,
1013021584, 1212780625, 1404075841, 1567051396, 1623848209, 2538748996,
2866103296, 2898960964, 3015437569, 3967236196, 4098688441, 4937451289
A072841 Numbers k such
that the digits of k^2 are exactly the same (albeit in different order) as the
digits of (k+1)^2.
13, 157, 913, 4513,
14647, 19201, 19291, 19813, 20191, 27778, 31828, 34825, 37471, 39586, 40297,
50386, 53536, 53842, 54913, 62986, 64021, 70267, 76513, 78241, 82597, 89356,
98347, 100147, 100597, 103909, 106528, 111847, 115024, 117391, 125986
Zak Seidov indica en esa página que todos los elementos de
esta lista tendrán la forma 9k+4. Se puede razonar con facilidad: si N^2 y
(N+1)^2 poseen las mismas cifras, y por tanto la misma suma de ellas, luego su
diferencia será múltiplo de 9, es decir:
(N+1)^2-N^2=9m, o lo que es igual,
2N+1=9m, 2N=9m-1, luego 2N tendrá resto -1 respecto a 9, que
equivale a resto 8. Por tanto, N tendrá resto 4, y será de la forma 9k+4.
Michel Marcus propone un código PARI idéntico al propuesto
más arriba (no lo había consultado previamente):
(PARI) isok(n) = vecsort(digits(n^2)) ==
vecsort(digits((n+1)^2)); \\ Michel Marcus, Sep 30 2016
Si comparamos cada número primo con su siguiente, podemos
detectar pares anagramáticos. Para Excel o Calc necesitaremos las funciones
ESPRIMO y PRIMPROX, que puedes consultar en la siguiente entrada de este blog:
http://hojaynumeros.blogspot.com.es/2012/04/proposito-de-ormiston.html
Con estas dos funciones podemos construir otra que nos
devuelva si un número es primo y anagramático con su siguiente:
Public Function anagram_primo(n) As Boolean
If esprimo(n) And cifras_identicas(n, primprox(n)) Then anagram_primo =
True Else anagram_primo = False
End Function
Puedes intentar reproducir la tabla siguiente, mediante un
bucle FOR-NEXT de búsqueda:
Si usamos en PARI la instrucción nextprime, podemos fácilmente detectar de otra forma qué primos consecutivos son anagrámaticos entre sí:
cifras_identicas(m,n)=vecsort(digits(m))==vecsort(digits(n))
anagram_primo(k)=isprime(k)&&cifras_identicas(k,nextprime(k+1))
for(i=2,10^5,if(anagram_primo(i),print1(i,", ")))
El resultado es:
Coincide con el obtenido con Excel y con el publicado en la siguiente página:
A069567 Smaller of two consecutive primes which are
anagrams of each other.
1913, 18379, 19013,
25013, 34613, 35617, 35879, 36979, 37379, 37813, 40013, 40213, 40639, 45613,
48091, 49279, 51613, 55313, 56179, 56713, 58613, 63079, 63179, 64091, 65479,
66413, 74779, 75913, 76213, 76579, 76679, 85313, 88379
A estos pares de primos se les da el nombre de “pares de
primos de Ormiston”. Se ha conjeturado que existen infinitos pares de este
tipo. Existen conjuntos similares pero de más de dos primos.
Triangulares
consecutivos
Podemos sustituir la función ESPRIMO por ESTRIANGULAR. Esta
última se basa en la idea de que un número triangular multiplicado por 8 y
sumado con la unidad se convierte en un cuadrado. Es fácil razonarlo:
Con esta propiedad se construye la siguiente función:
Function estriangular(n) As Boolean
Dim a
If escuad(8 * n + 1) Then estriangular =
True Else estriangular = False
End Function
Si la usamos de una forma parecida a como integramos ESPRIMO
en ANAGRAM_PRIMO, podemos construir una búsqueda similar con triangulares. Para
ello necesitamos otra función, que dado un triangular, nos devuelva su número
de orden:
Public Function ordentriang(n)
Dim k
If estriangular(n) Then k = Int((Sqr(8 * n +
1) - 1) / 2) Else k = 0
ordentriang = k
End Function
Public Function anagram_triang(n) As Boolean
Dim k
Dim es As Boolean
If estriangular(n) Then
k = ordentriang(n)
If cifras_identicas(n, (k + 1) * (k + 2) /
2) Then es = True
End If
anagram_triang = es
End Function
Con ella podemos buscar los triangulares consecutivos
anagramáticos. No es fácil, porque el primero es 404550. Puede merecer la pena
pasar a PARI:
cifras_identicas(m,n)=vecsort(digits(m))==vecsort(digits(n))
anagram_triang(k)={my(b,a,m=0);if(issquare(8*k+1),b=truncate((sqrt(8*k+1)-1)/2);a=(b+1)*(b+2)/2;if(cifras_identicas(k,a),m=1));m}
for(i=1,1e8,if(anagram_triang(i),print(i)))
404550, 2653056, 3643650, 5633046, 6413571, 10122750,
10656036, 13762881, 19841850, 26634051, 32800950, 47848653, 56769840, 71634465,
89184690,…
La lista la tienes más completa en
A247305 The smaller of
two consecutive triangular numbers which are permutations of each other.
404550, 2653056,
3643650, 5633046, 6413571, 10122750, 10656036, 13762881, 19841850, 26634051,
32800950, 47848653, 56769840, 71634465, 89184690, 103672800, 137108520,
317053971, 345069585, 392714325, 408508236, 440762895, 508948560, 598735710,
718830486, 825215625,…
De forma parecida a lo que ocurrió con los cuadrados, la
diferencia entre dos triangulares será múltiplo de 9, pero esa diferencia es
n+1, luego n+1=9k, y n(n+1)/2=(n/2)*9k. Si k es par, (k=2m), quedaría n(n+1)/2=n*9m,
que sería múltiplo de 9. Si k es impar, lo será n+1, luego n/2 será entero al
ser par n. Por tanto, también quedaría un múltiplo de 9.
Todos los términos de la sucesión son múltiplos de 9.
Oblongos
consecutivos
Podemos repetir el estudio con los números oblongos, es
decir, con n(n+1) comparado con (n+1)(n+2). Seguiremos con PARI, pero
sustituyendo la condición issquare(8*k+1) que caracteriza a
los triangulares por issquare(4*k+1), que corresponde a sus dobles, que son los
oblongos. Así que, si definimos como ok(k) la función que determina si un
oblongo es anagramático con su siguiente, nos quedaría:
ok(k)={my(b,m=0);if(issquare(4*k+1),b=truncate(sqrt(4*k+1)-1)/2;if(vecsort(digits(k))==vecsort(digits((b+1)*(b+2))),m=1));m}
23256, 530712, 809100, 11692980, 17812620, 20245500,
22834062, 23527350, 29154600, 83768256, 182236500, 189847062, 506227500,
600127506, 992218500, 1363566402, 1640209500, 2175895962, 2422657620, 2477899062,
2520190602, 3041687952, 3764129256, 4760103042,…
Esta sucesión permanecía inédita y la hemos publicado en https://oeis.org/A337784.
Existe una forma más rápida de encontrar estos oblongos, y
es darle el protagonismo a sus índices. En lugar de una función usaremos un
bucle FOR-NEXT:
for(i=1,1000000, a=i*(i+1); b=(i+1)*(i+2);
if(vecsort(digits(a))==vecsort(digits(b)), print1(a,", ")))
Si en la instrucción print1(a,", ") sustituimos
a por i, nos devolverá los índices de los oblongos encontrados:
152, 728, 899, 3419, 4220, 4499, 4778, 4850, 5399, 9152,
13499, 13778, 22499, 24497, 31499, 36926, 40499, 46646, 49220, 49778, 50201,
55151, 61352, 68993,…
Relación con el 9
Todos los números oblongos descubiertos son múltiplos de 9.
Lo razonamos:
Si n(n+1) es anagramático
con (n+1)(n+2), su diferencia, 2(n+1) será un múltiplo de 9
2(n+1)=9k; n=9k/2-1,
luego k es par y n tendría resto 8 respecto al módulo 9.
Lo puedes comprobar en el listado de índices de unas líneas más arriba. Así que
n=(9k-2)/2 con k par.
El número oblongo n(n+1)
quedaría como n(n+1)=(9k-2)/2*((9k-2)/2+1)=n*9k/2.
Al ser k par, n(n+1) será múltiplo de 9. También los puedes comprobar en el
listado de oblongos. De hecho, sus diferencias son múltiplos de 18.
Con esto finalizamos el tema. Otros tipos de números no presentan con facilidad esta propiedad de ser anagramáticos.