lunes, 30 de octubre de 2017

Cartesius(8) Particiones curiosas


Desde hace unos meses publico cálculos sobre la fecha del día en Twitter (@connumeros). Entre ellos aparecen algunos que se pueden desarrollar con Cartesius. Veamos unos ejemplos:

Sumas simétricas de cuadrados

El número 2147 se puede descomponer en una suma simétrica de tres cuadrados:
2147=23^2+33^2+23^2

¿Cómo encontrar, si existen, particiones similares en otro número?

El conjunto de condiciones es muy simple. Para el número 1298 sería:

xtotal=2
xt=1..37
x1=suc(n^2)
x2=suc(2*n^2)
suma=1298

El número de columnas es dos, porque los cuadrados iguales los agrupamos en un solo sumando. El rango 1..37 está elegido mediante la raíz cuadrada entera de 1298 por exceso. Finalmente, el primer sumando recoge un cuadrado y el segundo dos.

El resultado es:



Arriba aparecen dos juegos de sumandos y debajo hemos añadido la raíz cuadrada del primer sumando y la de la mitad del otro, resultando las bases (24,19) y (36,1), que dan lugar a las descomposiciones simétricas:

1298=19^2+24^2+19^2
1298=1^2+36^2+1^2

Otros números no admiten ninguna suma de este tipo. Inténtalo con 1300.
Se pueden imaginar otros conjuntos de condiciones. El siguiente es más intuitivo, pero algo más lento:

xtotal=3
xt=1..37
xt=suc(n^2)
es x1=x2
suma=1298
creciente

En él exigimos que X1=X2 y que los sumandos sean todos cuadrados. De esta forma aparecen los cuadrados iguales de forma más clara:


Algo más difícil de encontrar es un conjunto con cuatro cuadrados iguales y otro distinto, que puede ser el central. Así ocurre con el número 117:

117=3^2+3^2+9^2+3^2+3^2

Para otros números, por ejemplo el 116, vale este conjunto de condiciones:

xtotal=2
xt=1..11
x1=suc(n^2)
x2=suc(4*n^2)
suma=116

Es similar al caso de tres sumandos, cambiando 2*n^2 por 4*n^2. Obtenemos:



Se pueden interpretar como:

116=5^2+5^2+4^2+5^2+5^2
116=2^2+2^2+10^2+2^2+2^2

Finalmente, una simetría muy atractiva es la de cuadrados alternados.

210=4^2+9^2+4^2+9^2+4^2

Como en casos anteriores, no todos los números enteros las admiten. Las condiciones pueden ser:

xtotal=2
xt=1..11
x1=suc(2*n^2)
x2=suc(3*n^2)
suma=210

Dan lugar al juego de cuadrados anterior y otro más:

210=8^2+3^2+8^2+3^2+8^2

Te dejamos abiertas otras posibilidades similares.


Sumas de potencias

Esta descomposición es más difícil de lograr. Por ejemplo, se puede intentar descomponer un número en potencias de 2 y de 3. Si no permitimos repetir sumandos hanrá menos posibilidades. Intentemos conseguirlo con cinco sumandos, dos para la base 2 y tres para la base 3 (podían ser otros).

En el caso de 113 lo logramos:

xtotal=2
x1=1..8
x2=1..4
x1=suc(2*2^n)
x2=suc(3*3^n)
suma=113

Si has entendido los ejemplos anteriores comprenderás cómo funciona este. Hemos asignado rangos distintos para X1 y X2 para ahorrar tiempo. El resultado obtenido ha sido:

Se puede interpretar como:

113=2^4+2^4+3^3+3^3+3^3

También se pueden intentar sumandos únicos. Por ejemplo:

10817=22^3+13^2

Te dejamos que concretes las condiciones. Ese mismo número, 10817, admite una suma simétrica con cuadrado y cubo:

10817=61^2+15^3+61^2

Potencias superiores

Por experiencia sabemos que no es fácil la descomposición en potencias cuartas. Aquí tienes las condiciones para descomponer 210:

xrango=5
xt=1..6
xt=suc(n^4)
suma=210
creciente

Hemos tenido que llegar a cinco sumandos en este caso:

210=2^4+2^4+2^4+3^4+3^4

Prueba con otros números, y verás que es difícil que admitan estas descomposiciones.

Una curiosidad que se publica en las redes es la de descomponer un número en suma de potencias de sus cifras. Es muy raro que esto ocurra. Si quieres experimentar, puedes usar algo similar a esto:

xtotal=4
x1=1..12
x2=1..7
x3=1..4
x4=1..4
x1=suc(2^n)
x2=suc(3^n)
x3=suc(5^n)
x4=suc(6^n)
suma=2356

Este es el planteamiento para el 2356 (elegido al azar). Hemos ajustado los rangos para x1, x2, x3 y x4 de la forma una forma óptima, y se han obtenido dos soluciones:



Corresponden a dos sumas de potencias:

2356=2^3+3^7+5^3+6^2
2356=2^7+3^7+5^1+6^2

Productos cíclicos

Con expresiones similares podemos buscar sumas de otros tipos. Un ejemplo que solemos publicar es el de productos cíclicos de tres factores, del tipo

N=a*b+b*c+c*a

No es demasiado complicado organizar un conjunto de condiciones que lo logre. Es aconsejable un rango de búsqueda que llegue hasta la raíz cuadrada de N, para que no se nos escape ninguna posibilidad. Proponemos estas condiciones, en el caso de N=324

xtotal=3
xt=1..18
es x1*x2+x2*x3+x3*x1=324
creciente

La condición interesante es la tercera, que mediante la condición ES obliga a una suma de productos cíclicos con tres factores. Obtenemos:


Podemos comprobarlo:

324=4*13+13*16+16*4
324=6*9+9*18+18*6
324=6*12+12*14+14*6


jueves, 19 de octubre de 2017

Suma de cuadrado y capicúa


Hoy comenzamos con una cuestión sencilla que nos va a permitir algún desarrollo:

¿De cuantas formas se le puede restar a N un cuadrado y que la diferencia sea capicúa?

Operaremos con capicúas de al menos dos cifras, pues el conjunto de 0 a 9, aunque se consideran capicúas, produce resultados sin interés. Con nuestra herramienta Cartesius (http://www.hojamat.es/sindecimales/combinatoria/herramientas/herrcomb.htm#cartesius) el estudio es muy simple. Basta usar las condiciones siguientes, que hemos particularizado para el número 892:

xtotal=2
xt=1..1000
X1=filtro(cuadrado)
x2=filtro(capicua)
suma=892

En ellas se suman dos números del 1 al 1000 filtrando el primero como cuadrado y el segundo como capicúa. El resultado es

Como vemos, se obtienen cinco soluciones.

Número de descomposiciones

Con Cartesius se presenta el proceso de forma clara, pero para contar soluciones es preferible otra herramienta. Comenzaremos con el BASIC de las hojas de cálculo. Se puede definir fácilmente una función que cuente las sumas que se producen. Necesitaremos la función ESCAPICUA y con ella organizar un bucle de búsqueda. Dispones de su código al final de la entrada. La función requerida para encontrar esas sumas puede ser la siguiente:

Public Function numcuadcapi(n)
Dim x, p

p = 0 ‘ Contador de soluciones
For x = 1 To Sqr(n) ‘Llegamos hasta la raíz cuadrada de N
If escapicua(n - x ^ 2) Then p = p + 1 ‘Si es capicúa la diferencia, se incrementa el contador
Next x
numcuadcapi = p
End Function

Hay que tener en cuenta que ESCAPICUA no considera números de una cifra.

La probamos con el 892 y resultan cinco soluciones.

Si deseáramos leer esas soluciones, convertiríamos la función en una variable tipo texto para que las recogiera. Usaríamos esta variante:

Public Function numcuadcapi2$(n)
Dim x, a, b
Dim nc$

nc$ = ""
For x = 1 To Sqr(n)
a = x ^ 2
b = n - a
If escapicua(b) Then nc$ = nc$ + " CUAD " + Str$(a) + " CAP " + Str$(b)
Next x
numcuadcapi2 = nc$
End Function

Vemos en la imagen los dos tipos de resultados:

El segundo coincide con el obtenido en Cartesius.

La primera función nos permite obtener un listado de los números que admiten al menos una descomposición de este tipo:

12, 15, 20, 23, 26, 27, 31, 34, 36, 37, 38, 42, 45, 47, 48, 49, 53, 56, 58, 59, 60, 64, 67, 69, 70, 71, 75, 78, 80, 81, 82, 86, 89, 91, 92, 93, 97, 100, 102, 103, 104, 105, 108, 110, 111, 112, 113, 114, 115, 117, 119, 120,…

Con el lenguaje PARI se consigue la misma lista:

ispal(n)={n==eval(concat(Vecrev(Str(n))))&&n>=10}
numsumsqpal(n)={p=0;for(i=1,sqrt(n),if(ispal(n-i^2),p+=1));p}
for(x=1,100,q=numsumsqpal(x);if(q>=1,print1(x,", ")))

12, 15, 20, 23, 26, 27, 31, 34, 36, 37, 38, 42, 45, 47, 48, 49, 53, 56, 58, 59, 60, 64, 67, 69, 70, 71, 75, 78, 80, 81, 82, 86, 89, 91, 92, 93, 97, 100, 102, 103, 104, 105, 108, 110, 111, 112, 113, 114, 115, 117, 119, 120, 122, 124, 125, 126, 127, 130, 132, 133, 135, …

Entre los menores de 1000 el record lo tiene 817, con siete descomposiciones




Cuadrados con base capicúa

Podemos repetir el estudio pero exigiendo que la base del cuadrado sea también capicúa. Modificaremos los códigos para exigirlo. Con Cartesius habrá que modificar las condiciones:

xtotal=2
x1=1..32
x2=10..1000
xt=filtro(capicua)
es x1*x1+x2=892

Recorremos con X1 hasta la raíz de 892, con X2 hasta 1000, y exigimos que x1*x1+x2=892

Como era de esperar, no se obtiene ninguna solución, pero sí la tienen números cercanos a 892: 898 presenta dos soluciones, 11^2+777 y 22^2+414. Igual ocurre con 908, que es igual 11^2+787 y a 22^2+424. El resto de número próximos no presenta esta propiedad.

Con BASIC y PARI, añadiendo la condición de que la base sea capicúa mayor que 10, obtenemos un listado de los números que equivalen a este tipo de suma al menos de una forma:

132, 143, 154, 165, 176, 187, 198, 209, 220, 222, 232, 242, 252, 262, 272, 282, 292, 302, 312, 323, 333, 343, 353, 363, 373, 383, 393, 403, 413, 424, 434, 444, 454, 464, 474,…

El código PARI adecuado sería:

ispal(n)={n==eval(concat(Vecrev(Str(n))))&&n>=10}
numsumsqpal(n)={p=0;for(i=1,sqrt(n),if(ispal(i),if(ispal(n-i^2),p+=1)));p}
for(x=10,1000,q=numsumsqpal(x);if(q>=1,print1(x,", ")))

Devuelve el listado

132, 143, 154, 165, 176, 187, 198, 209, 220, 222, 232, 242, 252, 262, 272, 282, 292, 302, 312, 323, 333, 343, 353, 363, 373, 383, 393, 403, 413, 424, 434, 444, 454, 464, 474, 484, 494, 495, 504, 506, 514, 517, 525, 528, 535, 539, 545, 550, 555, 561, 565, 572, 575, 583, …

Se distinguen en la lista muchos números que son capicúas. Los extraemos:

ispal(n)={n==eval(concat(Vecrev(Str(n))))&&n>=10}
numsumsqpal(n)={p=0;if(ispal(n),for(i=1,sqrt(n),if(ispal(i),if(ispal(n-i^2),p+=1))));p}
for(x=10,1000,q=numsumsqpal(x);if(q>=1,write1("final.txt",x,", ")))

222, 232, 242, 252, 262, 272, 282, 292, 323, 333, 343, 353, 363, 373, 383, 393, 424, 434, 444, 454, 464, 474, 484, 494, 525, 535, 545, 555, 565, 575, 585, 595, 626, 636, 646, 656, 666, 676, 686, 696, 727, 737, 747, 757, 767, 777, 787, 797, 828, 838, 848, 858, 868, 878, 888, 898, 929, 939, 949, 959, 969, 979, 989, 999,…

Están todos los capicúas de tres cifras salvo los que tienen las decenas con valor 0 o 1. Es porque los capicúas al cuadrado solo pueden ser 11^2=121 y 22^2=484. Todo capicúa con la segunda cifra mayor que 1 y las otras no nulas produce al restarle 121 otro capicúa, pero en caso contrario, si las decenas son 0 o 1, la cifra de arrastre impide un resultado capicúa. Igual ocurre con el 484, que exige un 8 o 8n 9 en las decenas.

Hemos experimentado con sumas de triangular y capicúa, o con primos, pero aparecen muchos resultados que trivializan la cuestión. La dejamos abierta.

Anexo

Código de la función ESCAPICUA

Public Function escapicua(n) As Boolean
Dim l, i, k
Dim c As Boolean
Dim auxi$,nn$

nn$ =Str$(n)
auxi= Right(nn$, Len(nn$) - 1)
l = Len(auxi)
If l < 2 Then
escapicua = False
Else
c = True
i = 1
k = Int(l / 2)
While i <= k And c
  If Mid(auxi, i, 1) <> Mid(auxi, l - i + 1, 1) Then c = False
  i = i + 1
  Wend
End If
escapicua = c
End Function

lunes, 9 de octubre de 2017

Cartesius(7) - Particiones especiales


Esta entrada desarrolla varias descomposiciones clásicas de un número en sumandos de cierto tipo, como en tres números triangulares, cuatro cuadrados o dos o tres primos. En otra entrada añadiremos otras que hemos usado en las redes sociales, como capicúas, cuadrados simétricos o productos cíclicos.

Teorema de Javier Cilleruelo

El matemático español recientemente fallecido Javier Cilleruelo demostró que todo número natural es suma de tres capicúas en cualquier base de numeración mayor o igual que 5.

Para el cumplimiento del teorema consideraremos (y así se suele hacer) como capicúas los números de una sola cifra. Podemos también incluir el cero o no, porque lo que deseamos es efectuar comprobaciones a nuestro criterio. Si deseas excluir los de una cifra en tus descomposiciones (aunque no se cumpla el teorema) puedes definir XT=11..200, por ejemplo, en los rangos de sumandos. Aquí no lo haremos así.

Un ejemplo: descomposición del número 167

Como ignoramos la cota de cada sumando, deberemos definir XT=1..167. Para que los sumandos sean capicúas filtraremos usando filtro(capicua). Definimos tres columnas de sumandos y el resto es sencillo de entender. Quedaría así:

Como hemos admitido capicúas de una cifra obtenemos bastantes resultados:



Si definimos el rango como XT=11..167 reduciremos los casos a dos o más cifras.


Observamos que entre ellos hay una descomposición simétrica: 33+101+33. En Twitter (@connumeros) publicamos casos simétricos de este tipo. Podemos obligar a que los dos primeros sumandos sean iguales, añadiendo ES X1=X2 a las condiciones. Así lo hemos efectuado con el número 231 obteniendo tres resultados:


Hemos supuesto algo que no nos consta, y es que los sumandos iguales son los dos primeros, pero podían ser los últimos (recuerda que al ser creciente no se dará la igualdad de primero y último salvo que los tres sean iguales)

Podemos tenerlo previsto si cambiamos ES X1=X2 por ES (X1=X2)+(X2=X3)
Funciona esta condición porque en Cartesius la suma en este caso equivale a la conectiva O lógica. Lo hemos aplicado al 111 admitiendo capicúas de una cifra y se perciben muy bien los dos casos:



Los filtros en Cartesius pueden resultar lentos, porque se selecciona elemento a elemento. Hay que ejercitar la paciencia en casos más complejos. El siguiente listado, correspondiente a sumandos de tres cifras para generar el número 636, ha tardado algunos minutos.



Teorema de Lagrange

Todo entero positivo es suma de cuatro cuadrados.

Es evidente que pueden ser menos de 4, por lo que usaremos XRANGO=4 en lugar de XTOTAL=4.

Este caso resulta más rápido que el anterior. Hay dos razones para ello. Por una parte, no es necesario usar filtros, porque los cuadrados se pueden definir mediante la condición XT=SUC(n^2), lo que nos lleva a la segunda ventaja, y es que el rango se reduce a la raíz cuadrada del número dado.

Comenzamos este caso con el número 874 (elegido al azar). El planteo podría ser:



Se toma xrango=4 para que también aparezcan sumas de dos o tres cuadrados. El intervalo se toma de 1 a 30, que es la raíz cuadrada de 874 por exceso. La condición suc(n^2) exige que los sumandos sean cuadrados. Después sigue que la suma sea la pedida, 874, y que los sumandos estén ordenados de forma creciente.

Con ese planteamiento resultan 40 casos, de los que insertamos algunos:


Todos esos cuadrados suman 874. En el mismo desarrollo, mediante la función RAIZ puedes adjuntar las bases de esos cuadrados. Aquí tienes un recorte:


Lagrange demostró que bastan tres cuadrados, salvo en unos casos poco  numerosos, que son aquellos números que se pueden escribir como 4^k*(8m+7).

Para comprobar esta variante del problema basta definir XTOTAL=3. Hemos preparado así un listado de números del 600 al 610 con una descomposición en tres cuadrados para cada uno (hay más)



Vemos que faltan el 604 y el 607, y es que pertenecen a las excepciones, ya que 604=4^1*(8*18+7) y 607=4^0*(8*75+7)

Teorema de Gauss

Todo entero positivo es suma de tres números triangulares.

Este es el más popular de este tipo de teoremas. En esta imagen tan conocida expresó con ¡Eureka! su alegría por haber encontrado esta propiedad.



Con la condición SUC de Cartesius basta para engendrar los triangulares. Escribiremos XT=SUC(n*(n+1)/2)

Quedaría así en el caso de N=107:



Usamos XRANGO por si basta con un triángulo o dos. La cota 22 es la suficiente para llegar a 107. Después se definen los triangulares mediante xt=suc(n*(n+1)/2), y finalmente se ajusta la suma. Si se añade la condición CRECIENTE para eliminar repeticiones, resultarían cuatro descomposiciones:


Con Cartesius es fácil descubrir los sumandos triangulares. En una entrada ya antigua de este blog proponemos otro algoritmo para encontrarlos:
http://hojaynumeros.blogspot.com.es/2009/12/suma-de-tres-numeros-triangulares.html

Teorema de los poligonales

Fermat extendió las propiedades anteriores a sumas de cinco pentagonales, seis hexagonales y así con cualquier número de lados. Lo intentamos con pentagonales:

Los números pentagonales 1, 5, 12, 22, 35, 51, 70, 92,… se engendran con la expresión n(3n-1)/2

Así que basta adaptar lo expuesto anteriormente al caso de cinco sumandos del tipo pentagonal. Incluimos el planteamiento para el número 68:



Y el resultado:


Conjetura de Goldbach para impares

Todo número impar mayor que cinco se escribe como la suma de tres números primos.

Para comprobar esta conjetura volveremos a los filtros. Si los sumandos han de ser primos, usaremos FILTRO(PRIMO). En el siguiente ejemplo lo usamos para descomponer el número 67



Definimos tres columnas con rango 1..67 y filtro primo. Después obligamos a que la suma sea 67. Resultan 20 soluciones:



En la siguiente entrada desvelaremos algún secreto de nuestra publicaciones diarias sobre fechas en Twitter @connumeros.