miércoles, 23 de octubre de 2013

Triangulares con piezas concatenadas


Esta entrada participa en la edición 4.1231056 del Carnaval de Matemáticas, cuyo anfitrión es el blog Scientia.

Quien ha entrado en el mundo de la programación elemental sabe qué es la operación de concatenar cadenas (“strings”): situar sus caracteres uno detrás del otro. Si lo representamos por &, equivaldría a que “Pablo “&”Pérez”= “Pablo Pérez”.

En las hojas de cálculo disponemos de la función CONCATENAR, que une varios textos de celdas en uno =CONCATENAR(A12;B22;G1).

Más difícil es concatenar números naturales, de forma que el resultado sea otro verdadero número en el que cada cifra tenga su valor relativo. Una forma se basa en esta función CONCATENAR. Para ello debemos convertir los números en cadenas, con la función TEXTO, después, concatenarlos, y finalmente, usar la función VALOR para devolverles el carácter numérico. Tiene un inconveniente, y es que TEXTO ha de ir acompañado de un formato, y esto lo complica todo. En PARI no existe ese problema, por lo que puedes definir la concatenación entre números mediante

concatint(a,b)=eval(concat(Str(a),Str(b)))

Un método más matemático, y es el que adoptaremos para la hoja de cálculo es el de multiplicar el número de la izquierda por una potencia de 10 adecuada y sumar luego el de la derecha. Así, concatenar 255 con 182 equivaldría al número 255*10^3+182=255182

¿Qué exponente ha de tener esa potencia de 10? El número de cifras del que está a la derecha. Para encontrar ese número podemos usar el logaritmo decimal, de esta forma: =ENTERO(LOG(N;10))+1. Por tanto, una concatenación numérica vendría dada por la fórmula CONCAT(A;B)=A*10^((ENTERO(LOG(B;10))+1))+B

Esta fórmula fallaría para B=0, por lo que habría que retocarla con un condicional, pero no lo haremos. Basta que se sepa que existe esa función numérica, y en la práctica en este blog usaremos una rutina en Basic.

Se producen muchas curiosidades cuando concatenamos números naturales. Veamos algunas. Es evidente que nos movemos en cuestiones curiosas y no teóricas. Comenzamos generando números triangulares y dejaremos para otras entradas otros casos.

Producir triangulares

Intentaremos concatenar un número n consigo mismo o con otros relacionados con él a fin de conseguir un número triangular. Por ejemplo, 426 concatenado consigo mismo produce el triangular 426426. Para entender mejor lo que sigue, recuerda que todo número triangular se puede expresar como N(N+1)/2, es decir, la mitad de un oblongo N(N+1). En este caso, 426426=923*924/2

Estudiamos algunas concatenaciones concretas:

Triangular concatenando n//n

En primer lugar probaremos a concatenar un número consigo mismo para producir un triangular.

Ya están publicados en http://oeis.org/A068899

55, 66, 5050, 5151, 203203, 255255, 426426, 500500, 501501, 581581, 828828, 930930, 39653965, 50005000, 50015001, 61566156, 3347133471, 5000050000, 5000150001, 6983669836, 220028220028, 500000500000, 500001500001…

Si te llaman la atención los ejemplos del tipo 500…500 y 500…1500…1, piensa que no son nada extraordinarios: 500500=1000*1001/2, que es un triangular y 50015001=10001*10002/2 que es otro. Investiga casos similares.

Triangular concatenando 2n//n

De esta forma se generan los siguientes:

21, 105, 2211, 9045, 222111, 306153, 742371, 890445, 1050525, 22221111, 88904445, 107905395, 173808690, 2222211111, 8889044445, 12141260706, 15754278771, 222222111111, 888890444445, 22222221111111, 36734701836735, 65306123265306, 88888904444445, 163718828185941…

¿Es siempre triangular 2222…1111…? Sí, porque sus dobles se descomponen como 4444…2222=6666..6*6666…7, es decir, números oblongos formados por productos de números consecutivos. En lo que sigue acudiremos varias veces al hecho de que el doble de un triangular es un oblongo, k(k+1).
Se puede demostrar que cada vez que se añade la cifra a los factores aparecen 4444..2222. Lo razonamos con 666*667=444222 pero para más cifras se comprende igual: En efecto, si 666*667=444222, al añadir una cifra tenemos:

6666*6667=(6000+666)(6000+667)=36000000+6000*1333+666*667=43998000+444222=44442222.

Observa que si aumentamos las cifras, 1333 se convertiría en 133….33 y el sumando final 43998000 en 4399…8000… con lo que el efecto de reconstruir 44444 y 2222 sería el mismo.

Algo similar ocurre con la subsucesión 9045, 890445, 88904445,…engendrada por los oblongos 134*135, 1334*1335, 13334*13335,…Son casualidades que ocurren al dividir las potencias de 10 en tercios o en sextos.

Si deseas reproducir los resultados puedes usar este código en PARI

concatint(a,b)=eval(concat(Str(a),Str(b)))
istriang(x)=issquare(8*x+1)
{for(n=1,10^5,a=concatint(2*n,n);if(istriang(a),print(a)))}

Hemos publicado esta sucesión en https://oeis.org/A226742

Concatenación inversa n//2n

¿Y si concatenáramos en sentido contrario, primero el número y después su doble? Pues, aunque menos llamativo, también se construyen triangulares. Son estos:

36, 1326, 2346, 3570, 125250, 223446, 12502500, 22234446, 1250025000, 2066441328, 2222344446, 2383847676, 3673573470, 125000250000, 222223444446, 5794481158896, 12500002500000, 12857132571426, 22222234444446, 49293309858660...

Intenta razonar la aparición de estos números, con un método similar al usado en el anterior caso: 36, 2346, 223446, 22234446,… es porque sus dobles se descomponen como 666…68*666…69. Observa también esta otra subsucesión: 125250, 12502500, 12500025000, que provienen de los oblongos 500*501, 5000*5001,…¿Y el resto? Te lo dejamos por si encuentras una pauta.

Código PARI para este caso:

concatint(a,b)=eval(concat(Str(a),Str(b)))
istriang(x)=issquare(8*x+1)
{for(n=1,10^7,a=concatint(n,2*n);if(istriang(a),print(a)))}

Hemos publicado esta sucesión en https://oeis.org/A226772

Concatenación n//n+1

También se producen números triangulares:

45, 78, 4950, 5253, 295296, 369370, 415416, 499500, 502503, 594595, 652653, 760761, 22542255, 49995000, 50025003, 88278828, 1033010331, 1487714878, 4999950000, 5000250003, 490150490151, 499999500000, 500002500003, 509949509950, 33471093347110, 49999995000000, 50000025000003, 69834706983471…

Se destaca el subconjunto 45, 4950, 499500,….y es porque sus dobles son 9999…*10000… y también los 5253, 502503, 50035003,…¿En qué se parecen entre sí?

Puedes reproducirlos con este código PARI

concatint(a,b)=eval(concat(Str(a),Str(b)))
istriang(x)=issquare(8*x+1)
{for(n=1,10^7,a=concatint(n,n+1);if(istriang(a),print(a)))}

Hemos publicado esta sucesión en https://oeis.org/A226788

Con n+1//n resultan verdaderos monstruos

21, 26519722651971, 33388573338856, 69954026995401, 80863378086336,…

A partir de este último no se han podido encontrar más para n<10^10, o resultados menores que 10^20. Quizás con una herramienta o equipo más potentes se pueda encontrar alguno más fuera de esa acotación. Los lectores quedáis invitados a intentarlo. Podéis usar este código PARI

concatint(a,b)=eval(concat(Str(a),Str(b)))
istriang(x)=issquare(8*x+1)
{for(n=1,10^7,a=concatint(n,n+1);if(istriang(a),print(a)))}

Si disponéis de MATHEMATICA también bastará adaptar este otro, añadido por T.D. Noe a A226789:

TriangularQ[n_] := IntegerQ[Sqrt[1 + 8*n]]; t = {}; Do[s = FromDigits[Join[IntegerDigits[n+1], IntegerDigits[n]]]; If[TriangularQ[s], AppendTo[t, s]], {n, 100000}]; t (* T. D. Noe, Jun 18 2013 *)

No vamos seguir las concatenaciones de este tipo. Las dejamos para quien le apetezca encontrar más ejemplos curiosos. Sí podíamos seguir jugando con las cifras, pero con otras estructuras. Seguimos buscando triangulares.

Otras concatenaciones para triangulares

No hemos intentado todavía concatenar un número con su reverso. Por ejemplo, 59 con 95 forman el triangular 5995. Intentamos una búsqueda por ahí. Antes de presentar resultados hay que advertir que los terminados en 0, como 90, producen resultados ambiguos, en este caso 990. Por eso restringiremos la búsqueda a números no múltiplos de 10. En ese caso resultan estas soluciones:

55, 66, 5995, 8778, 617716, 828828, 35133153, 61477416, 1264114621,…, que forman una subsucesión de http://oeis.org/A003098

Un resultado curioso es si concatenamos un número n por la izquierda con 10*n, porque en ese caso resulta un número duplicado con un cero en el centro. Hemos encontrado estos, que resultan muy vistosos:

41041, 66066, 165301653, 56661056661, 3719010371901, 276816602768166, 13776656013776656, 28265441028265441, 41631576041631576, 47337278047337278, 55666611055666611, 82189446082189446, 91836735091836735, 1185252600118525260, 1960592100196059210…

Como es norma de este blog, evitamos seguir insistiendo en el tema. Con estos ejemplos nuestros lectores pueden abordar otras búsquedas.