viernes, 28 de junio de 2024

Regresos 11: Construcciones con un número y sus cifras

Hace un tiempo, publiqué en Twitter (@connumeros) esta identidad:

22622*2*2*6*2*2=2171712

En ella, un número capicúa (o palindrómico), multiplicado por sus cifras, produce otro capicúa.

Ese mismo día comprobé esta otra igualdad:

22226+2*2*2*2*6=22322.

Por cumplirse la primera igualdad, 22622 pertenece a http://oeis.org/A229550, aunque en la misma no se exige que sea capicúa.

Estas dos propiedades en un mismo número me han animado a buscar casos parecidos en los que intervengan las cifras y se construya un número capicúa. Para ello regresaré a una entrada antigua.

Generación con un producto

En el año 2018 abordé en este blog el caso de números que permutaban sus cifras si se les sumaba el producto de las mismas. Esto ocurre, por ejemplo, en 9518=9158+9*1*5*8

(Ver https://hojaynumeros.blogspot.com/2018/09/permutacion-de-cifras-al-sumar-su.html)

En esa entrada informaba de que Derek Orr ya había publicado casos similares en OEIS en 2014 (Ver http://oeis.org/A247888   y http://oeis.org/A243102)

En el desarrollo de los cálculos se usaban las funciones CIFRAS_IDENTICAS y PRODUCIFRAS. Esta última nos será útil en las cuestiones que abordemos ahora, por lo que se recomienda su repaso en la entrada enlazada.

También usaremos la función ESCAPICUA 

(Ver https://hojaynumeros.blogspot.com/2017/10/suma-de-cuadrado-y-capicua.html)

Todos estos antecedentes justifican que el título de Regresos 11 para esta entrada.

Capicúa igual a otro capicúa por sus cifras

En el primer ejemplo, un capicúa multiplicado por el producto de sus cifras produce otro capicúa. No es difícil construir una búsqueda con esta condición con la función PRODUCIFRAS

Abordamos el primer ejemplo y sus similares: 22622*2*2*6*2*2=2171712

Al tener a nuestra disposición las funciones adecuadas, bastará buscar aquellos capicúas (con la función ESCAPICUA) que multiplicados por PRODUCIFRAS produzcan otro capicúa. Exigiremos que el producto de las cifras sea mayor que uno para evitar trivialidades.

Al realizar la búsqueda se comprueba que existen más casos de los esperados al principio, y entre ellos, el publicado 22622:


Aunque se programó la búsqueda hasta 100000, los resultados se detienen en el ejemplo ya conocido. Al proseguir más adelante aparecieron los casos 112211, 121121, 211112, lo que hace sospechar que casi todos los que aparezcan tendrán un producto igual a 2 o 3. Para profundizar, tradujimos la búsqueda al lenguaje PARI:

escapicua(n)={Str(n)==concat(Vecrev(Str(n)))}
producifras(n)={my(d=digits(n),p,i);p=prod(i=1, #d, d[i]);p}
es(n)={my(p=producifras(n));p>1&&escapicua(n)&&escapicua(n*p)}
for(i=1,10^6,if(es(i),print(i)))

 Con este planteamiento aparecieron todos los ejemplos inferiores a 10^7. Abundan entre ellos los construidos con las cifras 1, 2 y 3. El último es destacable.

2, 3, 22, 77, 121, 131, 212, 464, 1221, 2112, 11211, 11311, 12121, 21112, 22622, 112211, 121121, 211112, 1112111, 1113111, 1121211, 1211121, 2111112, 2223222, 4213124,…

Se puede afirmar que esta sucesión es infinita, pues pertenecerán a ella todos los números capicúas del tipo 111…11211…111, 111…11311…111, 111…212…111 y otros similares. Entre ellos aparecerán otros como 4213124, de desarrollo más inesperado.

Capicúa más suma de sus cifras

Otros ejemplos se pueden construir sumando las cifras en lugar de usar su producto. También contamos con la función SUMACIFRAS, que se puede estudiar, por ejemplo, en la entrada https://hojaynumeros.blogspot.com/2015/03/autonumeros-1.html

Bastará exigir que N (capicúa) más SUMACIFRAS(N) sea también capicúa. Los primeros ejemplos son:


Estos son los únicos números con esta propiedad entre los menores de 10^7, según se comprueba con PARI. Sin embargo, si se amplía el rango de búsqueda aparecen otros, como el 73999999999937, según se ve en https://oeis.org/A229622.

En esa página se afirma que la sucesión es infinita, porque se pueden añadir, con más cifras, números similares a 1099999999999901. No es difícil razonarlo.

Número no capicúa genera un capicúa al multiplicar por sus cifras

Podemos eliminar la condición de que el número que engendra un capicúa no sea él mismo de ese tipo al multiplicar por sus cifras. En  este caso, además de soluciones predecibles, aparecen otras que parecen ser debidas a casualidades:


Es predecible que 35*3*5=525, pero los dos últimos de la tabla sorprenden por su similitud.

Número no capicúa genera un capicúa al sumar sus cifras

Si en lugar de multiplicar por sus cifras, las sumamos, se amplían los ejemplos:


Los números de la primera columna están publicados en https://oeis.org/A229545, y allí se explica algunos ciclos de las últimas cifras de sus elementos.

La última columna parece contener todos los capicúas a partir del 11, pero no es así, porque, por ejemplo, falta el 121. En efecto, es imposible que cumpla la condición:

Si partimos de un número de dos cifras 10a+b tendríamos

10a+b+a+b=11a+2b=121

Como 2b<20, ningún múltiplo de 11 inferior a 121 y con a<10 presenta una diferencia menor de 20 con él. No nos valdría 99 ni 110.

Si el número tuviera tres cifras tampoco sería posible

100+10a+b+1+a+b=101+11a+2b, y tendríamos la misma situación. El número 121 es colombiano o autonúmero

(Ver nuestra explicación en https://hojaynumeros.blogspot.com/2015/03/autonumeros-1.html)

Según esto, si disponemos, como es en este caso, de las funciones ESCAPICUA y ESAUTO (ver entrada enlazada), bastará exigir las dos condiciones para obtener la lista de capicúas que no admiten la propiedad que estamos estudiando:


Están publicados en https://oeis.org/A332970

Números con cifras crecientes

Nos queda comprobar casos similares al recordado al principio de este estudio:

22226+2*2*2*2*6=22322

Con multiplicación

Ya hemos usado en otra ocasión la función CIFRAS_CRECIENTES, que determina si un número posee sus cifras crecientes en sentido amplio. Puedes consultar la siguiente entrada:

https://hojaynumeros.blogspot.com/2022/06/numeros-con-cifras-crecientes-o.html

Con esta función es fácil encontrar números con cifras crecientes tales que, al multiplicar por todas sus cifras, resulte un capicúa. Esos son los primeros resultados:


Con la suma

Volvemos a intentarlo, pero sumando el producto de las cifras, e ignorando los productos nulos:


Entre otros muchos resultados menores, aparece el que encabezaba este texto: 22226+2*2*2*2*6=22322.

Con esto finalizamos la exploración de estas curiosidades similares entre sí. Se han dejado algunas sin estudiar, como es nuestra costumbre, para dejar otras posibilidades de exploración y no extender demasiado este texto.

Algunos resultados están inéditos, pero el autor no los va a publicar en OEIS.

Al igual que en temporadas anteriores, con esta entrada de junio termina la 2023-24. En verano esperan otras actividades, y ya volverán más curiosidades en septiembre. Gracias por leerme.

 

viernes, 21 de junio de 2024

Regresos 10 - Multicombinatorios

En septiembre de 2009 publiqué dos entradas sobre números que se pueden expresar como combinatorios de varias formas. Se transcriben a continuación algunos párrafos de ellas.

Todo número natural m se puede expresar como un número combinatorio, porque

Sólo una proporción pequeña de números admite otra representación (o varias) en forma de número combinatorio. Así el 6 admite tres representaciones

El número 35 admite cuatro

Los números 120 y 210 admiten seis representaciones. Aquí tienes las de 120:

No hay muchos más números entre los 10000 primeros que presenten representaciones con tantas posibilidades. Sin embargo, existe un número de cuatro cifras, capicúa, que se puede representar de ocho formas diferentes. Es el número 3003, porque


Este tipo de cuestiones se pueden abordar con hoja de cálculo de varias formas.

Estudio sin macros

Para encontrar expresiones de un número como combinatorio no trivial (excluyendo C(n,0), C(n,1), C(n,n-1) y C(n,n), cuyos valores se encuentran de inmediato), se puede formar el triángulo de Tartaglia o Pascal en una hoja de cálculo y después buscar en la matriz correspondiente el número que nos interesa.

Una cuestión previa es la de saber hasta qué fila del triángulo se debe considerar, de forma que en las siguientes no encontraremos el número buscado N. Una idea sencilla es la de que en la fila k el número combinatorio más pequeño es C(k,2)=k(k-1)/2. Si igualamos a N tendremos un tope para las filas a considerar, porque en las siguientes los combinatorios serán mayores que N.

Despejamos y resulta:

2N=k(k-1);  luego (k-1)2<2N. Esto nos proporciona una cota para los valores de k. Tomamos parte entera y añadimos una unidad:

Para explorar los números combinatorios puedes usar las hojas de cálculo contenidas en la página http://www.hojamat.es. (Ver en el apartado de Herramientas de Combinatoria, la dirección http://www.hojamat.es/sindecimales/combinatoria/herramientas/hoja/tartaglia.xls)

Fijamos el número a buscar, por ejemplo el 210. Deberemos seleccionar el triángulo hasta la fila INT(RAIZ(210*2))+1=21. En la imagen sólo se incluye parte del triángulo:

Encontramos 210 en la fila 21 (no se ve la otra solución) y en la fila 10, luego es un número multicombinatorio.

Si hay que usar muchas filas, se puede seleccionar todo el rango del triángulo y asignarle el nombre de tartaglia. Luego, con la función =CONTAR.SI(tartaglia;210) se buscan las veces en las que aparece el 210 u otro número cualquiera que desees probar. Incluso puedes escribir los números en columna y aplicar la fórmula reiteradamente.

Con este procedimiento puedes encontrar otros números multicombinatorios, como 1540 o 7140, ...

Sus descomposiciones en factores primos nos pueden dar una pista del porqué de su propiedad.

120= 2*2*2*3*5; 210=2*3*5*7; 1540=2*5*7*11; 3003=3*7*11*13; 7140=2*3*5*7*17

La gran variedad de su factores primos hace que estos números puedan aparecer en cocientes de factoriales, como los usados en los números combinatorios.

Mediante una función

Se puede organizar una búsqueda si se posee una función sobre un número N, tal que nos devuelva todas las formas de ser combinatorio que posee ese número.

Uso de la función COMBINAT

Podemos usar también la función de las hojas que nos da un número combinatorio, COMBINAT(N;K). Para cada número N a probar se organiza un bucle doble para el índice superior m del número combinatorio y para k el inferior. El índice m recorrerá los valores entre 1 y el tope. El índice k recorrerá todos los valores hasta que el número combinatorio iguale o sobrepase a N.

Para cada valor concreto de N se cuentan las veces en las que los valores m y k producen un número combinatorio igual a N y se devuelven en modo texto para posteriores operaciones. No se tienen en cuenta los casos triviales con índices inferiores 0, 1, n-1 y n.

Una versión de esta función puede ser:

Function escombi$(n) ‘No se incluyen C(n,0) ni C(n,1)
Dim i, k, v, m As Double
Dim s$

 s = "" ‘Contenedor de la solución
m = Int(Sqr(2 * n) + 1) ’Un tope razonable
For i = 3 To m ‘Índice superior. Se excluyen 1 y 2
For k = 2 To i – 2 ‘Índice inferior, sin 0, 1, n-1 y n
v = Application.WorksheetFunction.Combin(i, k)’Número combinatorio
If abs(v – n)<1e-6 Then s = s + " (" + Str$(i) + " , " + Str$(k) + ")"’Nueva solución. No se usa v=n por los redondeos
Next k
Next i
If s = "" Then s = "NO"’ Si no es combinatorio devuelve un NO
escombi = s
End Function

Se ha tenido que usar el criterio abs(v-n)<1e-6 porque combin no da siempre un entero bien definido cuando crece demasiado el índice superior.

Con esta función se descubren los números combinatorios no triviales. Por ejemplo, entre 10 y 21 obtendríamos:

 


Siempre encontraremos una mayoría que no es un número combinatorio, y obtendremos un “NO”. Serán frecuentes los números triangulares, que son de la forma C(n,2), que aquí serían 10, 15 y 21. En la tabla aparece también el 20, que es C(6,3).

Podemos buscar combinatorios en cualquier rango, tal como hemos procedido en la siguiente tabla:

Observamos que la mayoría de soluciones son números triangulares, que son aquellos en los que el índice inferior puede valer 2. Figura el ejemplo de 120 que usamos anteriormente.

Están publicados en https://oeis.org/A006987, y su programación en PARI coincide básicamente con nuestra función en VBasic.

Algoritmo sin la función COMBINAT

La función COMBINAT puede presentar errores porque se sobrepase en los cálculos la capacidad de los registros o por redondeo de decimales. Es mucho más rápida la construcción de los combinatorios por filas del triángulo de Tartaglia, basándonos en estas cuatro identidades:

Como las dos primeras no nos interesan, comenzaríamos la búsqueda en C(n, 2), y a partir de ella generaríamos combinatorios hasta el centro de la fila del triángulo, para ignorar el combinatorio simétrico. La función quedaría así:

Function escombi$(n)
Dim i, k, v, m As Double
Dim s$

s = ""
m = Int(Sqr(2 * n) + 1)’Filas del triángulo de Pascal
For i = 3 To m
k = 2: v = i * (i - 1) / 2’ Se comienza por C(i,2)
While k <= Int(i / 2) And v <= n’ Solo se llega a la mitad de la fila y se ignora el simétrico
If v = n Then s = s + " (" + Str$(i) + " , " + Str$(k) + ")"
v = v * (i - k) / (k + 1) ‘Siguiente número combinatorio de la fila
k = k + 1
Wend
Next i
If s = "" Then s = "NO"
escombi = s
End Function

Este planteamiento es más rápido que el anterior, y da más seguridad en la exactitud de los cálculos. En la siguiente tabla figuran los mismos resultados, sin las soluciones simétricas:

 

Aquí destacan más los multicombinatorios como el 120.

Otras posibilidades

La función que hemos presentado se puede convertir en booleana, que sus salidas sean VERDADERO y FALSO. De esa forma sería sencillo plantear otras cuestiones, que las dejamos como ejemplo:

Con esta función en modo booleano es fácil encontrar números combinatorios cerca de un número dado. Podríamos diseñar funciones del tipo SIGUIENTE o ANTERIOR. Así, el número combinatorio que sigue al 4000 sería

SIGUIENTE(4000)=4005=C(90,2)

El anterior a 10000 es

ANTERIOR(10000)=9980=C(40,3)

Podríamos, igualmente, encontrar números combinatorios que también fueran cuadrados, como el 4, el 36 o el 1225. Otros números que fueran promedios de combinatorios… y así podríamos seguir.

En otro ámbito, hemos aplicado un algoritmo voraz para descomponer (salvo algún resto) un número en sumandos combinatorios. Por ejemplo:

22324=C(211,2)+C(11,3)+C(4,1)

Nos podemos plantear otras tareas, que quedan pendientes para algún otro momento.

martes, 11 de junio de 2024

Descomposición en factores semiprimos (2)

Finalizamos las descomposiciones en factores semiprimos (ver entrada anterior) planteando aquellas que no usen factores repetidos. Es una exigencia que puede resultar fuerte, porque muchos números no admiten estas descomposiciones aunque posean un número par de factores. Están publicados:

A320892              Numbers with an even number of prime factors (counted with multiplicity) that cannot be factored into distinct semiprimes.                   

16, 64, 81, 96, 144, 160, 224, 256, 324, 352, 384, 400, 416, 486, 544, 576, 608, 625, 640, 729, 736, 784, 864, 896, 928, 960, 992, 1024, 1184, 1215, 1296, 1312, 1344, 1376, 1408, 1440, 1504, 1536, 1600, 1664, 1696, 1701, 1888, 1936, 1944, 1952, 2016, 2025

Por ejemplo, 160=25*5, y en cualquier factorización hay que repetir el factor 4.

Con Cartesius basta añadir la condición NO REPITE, para obtener las factorizaciones requeridas. Elegimos un ejemplo, el 693=32*7*11:

 

Son condiciones similares a las anteriores, pero añadiendo NO REPITE. Así conseguimos las factorizaciones sin repetición:


Si tomamos nuestro ejemplo del 900, que poseía cinco factorizaciones, al evitar repeticiones se pierden tres:

Quedaría:

 


Versión VBasic

Lo que sigue es un ejercicio de programación, prescindible, pero usa un truco que puede ser interesante. Quien no tenga interés en ello, puede interrumpir aquí la lectura.

Para encontrar todas las combinaciones de factores semiprimos sin repetir, expresamos en sistema de numeración binario todos los números desde el 1 hasta el cardinal del conjunto de factores menos una unidad. Así representaremos cada elección de factores con un binario, desde 000000…, que equivale a no elegir ninguno, hasta 111111…, en el que se elegirían todos. El 010110, por ejemplo,  representaría el producto del segundo factor con el cuarto y el quinto (donde figuran los unos). El que se elija o no cada factor lo reflejamos en el vector e(). Explicado de esta forma parece lento y complicado, pero el algoritmo resulta rápido en recorrer todos los productos posibles. El listado es el siguiente, en forma de función:

Function descompsemi$(n)

Dim i, j, contador, tope, m, p, k, fp
Dim producto As Long
Dim seguir As Boolean
Dim su(1000), e(1000) ‘Vectores para acoger factores
Dim st$ ‘String para acoger resultados

If esprimo(n) Then descompsemi = "0": Exit Function ‘No hay descomposición
If essemiprimo(n) Then descompsemi = "1 : " + factores(n): Exit Function ‘Solo una descomposición.
'En primer lugar se rellena el vector su, con semiprimos divisores
tope = 0: i = 0: st$ = ""
For j = 1 To n
If essemiprimo(j) And n / j = n \ j Then i = i + 1: su(i) = j: tope = tope + 1
Next j ‘Si es divisor semiprimo se incorpora al vector
For j = 1 To 2 ^ tope – 1 ‘Se generan los productos
m = j: p = 0: producto = 1
While m > 0: p = p + 1: e(p) = m Mod 2: m = Int(m / 2): Wend ‘Códigos en binario para los productos
For k = 1 To p
If e(k) > 0 Then producto = producto * su(k):
Next k ‘Se crean los productos
fp = n / producto
If fp = 1 Then ‘El producto termina con éxito.
Se incrementa el contador y se escribe la solución.
contador = contador + 1
st = st + "   "
For k = 1 To p
If e(k) > 0 Then st = st + Str$(su(k)) + "*"
Next k
If Right$(st, 1) = "*" Then st = Left(st, Len(st) - 1)
If fp > 1 Then st = st + "*" + Str$(fp)
End If
Next j

El resultado se presenta con el contador seguido de la solución.

st = ajusta(contador) + " ## " + st
If Right$(st, 1) = "*" Then st = Left(st, Len(st) - 1)
descompsemi = st
End Function

Los resultados de esta función coinciden con los obtenidos mediante Cartesius:

Descompsemi(900)= 2 ##     6* 10* 15    4* 9* 25
Descompsemi(693)= 2 ##     21* 33    9* 77
Descompsemi(160)= 0 ## (No hay solución)

En la página https://oeis.org/A322353 se recogen los números de factorizaciones en distintos semiprimos, así como los record que se producen. Por ejemplo, 1260 es el primer número con cinco factorizaciones. Lo comprobamos:

Descompsemi(1260)= 5 ##     9* 10* 14    6* 14* 15    6* 10* 21    4* 15* 21    4* 9* 35

Con esta función podemos encontrar aquellos números que sólo admiten una descomposición sin ser semiprimos:

Es fácil descubrir por qué son estos y no otros.

Otra factorización

El autor Gus Wiseman, de la Universidad de California, ha estudiado casi todas las factorizaciones que hemos desarrollado, y algunas otras suyas usan indistintamente los primos y los semiprimos como factores. Anteriormente hemos usado aquí los dos tipos, pero con un solo número primo para completar. Ahora los usaremos como un solo conjunto. Basta cambiar ligeramente nuestra última función para que los vectores su() y e() admitan también divisores primos.

Este ha sido el resultado para los veinte primeros números:


Puede que se echen de menos algunas factorizaciones, pero es que no admiten repetición, si no, sería 8=2*2*2, y no ha resultado así.

Gus Wiseman las ha publicado en

https://oeis.org/A339839

A339839 Number of factorizations of n into distinct primes or semiprimes.

1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 1, 2, 1, 2, 2, 0, 1, 2, 1, 2, 2, 2, 1, 2, 1, 2, 1, 2, 1, 4, 1,

Reproducimos aquí algunas factorizaciones logradas con nuestra función:

30:   4 ##     2* 3* 5    5* 6    3* 10    2* 15
60:   5 ##     3* 4* 5    2* 5* 6    2* 3* 10    6* 10    4* 15
180: 6 ##     2* 3* 5* 6    4* 5* 9    3* 6* 10    2* 9* 10    3* 4* 15    2* 6* 15
210: 10 ##     2* 3* 5* 7    5* 6* 7    3* 7* 10    3* 5* 14    2* 7* 15    14* 15    2* 5* 21    10* 21    2* 3* 35    6* 35

Con estos ejemplos damos por finalizado el repaso que hemos emprendido sobre las factorizaciones con semiprimos. Queda algún tipo, pero aquí paramos el desarrollo.