viernes, 27 de noviembre de 2020

Consecutivos con las mismas cifras

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 i, h, s

Dim ci As Boolean

Dim ca(10), cb(10)

 For i = 0 To 9: ca(i) = 0: cb(i) = 0: Next i ‘Se habilitan diez contenedores para las frecuencias de las cifras

 h = m ‘Se copia m porque se a ir alterando

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

 h = n ‘Se repite el mismo trabajo con n

While h > 0

i = Int(h / 10)

s = h - i * 10

h = i

cb(s) = cb(s) + 1

Wend

 ci = True ‘Se supone que las cifras son idénticas

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

 Así, la función aplicada a los números 2223334448 y 8234234234 devuelve VERDADERO, pues las cifras 2, 3, 4 y 8 poseen frecuencias iguales.

 

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:

 cifras_identicas(m,n)=vecsort(digits(m))==vecsort(digits(n))

 Se entiende con sólo leerlo: “las cifras ordenadas de m han de ser idénticas a las de n”.

 Con estas dos funciones ya estamos preparados para emprender búsquedas.


 Cuadrados consecutivos

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

 A227692 Smaller of two consecutive squares which are anagrams (permutations) of each other.                  

169, 24649, 833569, 20367169, 214534609, 368678401, 372142681, 392554969, 407676481, 771617284, 1013021584, 1212780625, 1404075841, 1567051396, 1623848209, 2538748996, 2866103296, 2898960964, 3015437569, 3967236196, 4098688441, 4937451289

 Sus bases también están publicadas en http://oeis.org/A072841

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

 Primos consecutivos

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:

http://oeis.org/A069567

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

 Al final, la búsqueda de triangulares consecutivos anagramáticos quedaría así:

Public Function anagram_triang(n) As Boolean

Dim k

Dim es As Boolean

 es = False

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)))

 Con este código obtenemos los primeros triangulares anagramáticos con su siguiente:

404550, 2653056, 3643650, 5633046, 6413571, 10122750, 10656036, 13762881, 19841850, 26634051, 32800950, 47848653, 56769840, 71634465, 89184690,…

La lista la tienes más completa en

http://oeis.org/A247305

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}

 Con esta función podemos encontrar los primeros oblongos que cumplen la condición pedida. Los primeros son estos:

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.

No hay comentarios: