Mostrando entradas con la etiqueta Hoja de cálculo. Mostrar todas las entradas
Mostrando entradas con la etiqueta Hoja de cálculo. Mostrar todas las entradas

jueves, 2 de junio de 2022

Los pandigitales completos

Se llaman pandigitales a los números que presentan en su representación todas las cifras posibles en una base de numeración. Aquí nos restringiremos a base 10 y a aquellos números que contienen todas las cifras del 0 al 9 (completos), pero sin repetición. Es el concepto más simple y útil respecto a otras variantes.

Es claro que el pandigital más pequeño de este tipo será 1023456789, y el mayor 9876543210. Como no consideramos repeticiones de cifras, su número será 10!=3628800 si admitimos el cero inicial, y 10!-9!= 3265920 si no lo admitimos.

Ningún número pandigital de este tipo puede ser un número primo, porque cumple el criterio de divisibilidad entre 9 y 3, al sumar sus cifras 45

Reconocimiento de pandigitales

No es fácil reconocer mediante un algoritmo si un número (del que no conocemos en principio su expresión decimal) es pandigital o no. Es evidente que normalmente conocemos sus cifras, pero en una búsqueda no. Por ejemplo, si buscamos un pandigital que sea triangular, no conocemos sus cifras hasta que lo encontremos.

Aquí, como es costumbre, estudiaremos dos versiones, una para hoja de cálculo y otra para PARI.

Proceso en PARI

La segunda es muy fácil de entender:

 pandigi(n)= #vecsort(digits(m), , 8)==10

Literalmente nos dice, que si ordenamos el vector formado por las cifras (vecsort(digits), eliminamos repetidos (parámetro 8), y luego las contamos (signo #), ha de resultar un número igual a 10, que sería el número de cifras sin repetición.

Un ejemplo de uso de esta función es el de encontrar el primer pandigital cuadrado. Tomamos la menor base cuyo cuadrado tiene diez cifras, que es  31623, y vamos avanzando cuadrados hasta encontrar un pandigital. Sería así:

pandigi(m)=#vecsort(digits(m), , 8)==10

m=31623;q=m^2;while(pandigi(q)==0,m+=1;q=m^2);print(m)

En primer lugar define la función pandigi, para reconocer pandigitales, y después avanza los cuadrados en un bucle while hasta encontrar un valor de pandigi que no sea cero.

El resultado es 1026753849=32043^2

El resto de los pandigitales cuadrados los puedes consultar en http://oeis.org/A036745

Proceso en hojas de cálculo

En este caso perdemos la potencia del lenguaje PARI, pero podemos imitar nuestro reconocimiento de un pandigital:

Nosotros iríamos recorriendo las cifras del número, y si falta una, lo rechazaríamos, y si existe una repetición, también. Después contaríamos que estuvieran las diez cifras.

Pues algo así realizaremos con VBasic. Para ello prepararemos diez memorias que alojen las frecuencias de las cifras. Cada vez que aparezca una incrementamos la memoria correspondiente. Podemos organizar todo con esta función:

Public Function pandigital(a) As Boolean

Dim ci(10)

Dim i

Dim t As Boolean

t = True

For i = 0 To 9: ci(i) = 0: Next i ‘Preparamos diez memorias

If numcifras(a)<>10 then pandigital=false:exit function

For i = 1 To 10

ci(cifra(a, i)) = ci(cifra(a, i)) + 1  ’Anotamos cada cifra

‘Si la frecuencia es mayor que 1, se rechaza el número

If ci(cifra(a, i)) > 1 Then pandigital = False: Exit Function

Next i

s = 0

For i = 0 To 9

If ci(i) = 0 Then t = False ‘Si queda una memoria vacía, se rechaza

Next i

pandigital = t ‘Devuelve verdadero o falso

End Function

Con esta función es fácil obtener un listado de los primeros pandigitales:

Podemos usar esta función para encontrar, por ejemplo, el primer número pandigital triangular. Partimos de 1000006281, primer triangular de 10 cifras, de orden 44721, y vamos recorriendo triangulares hasta encontrar un pandigital. Todo se basa en la fórmula de los triangulares, N(N+1)/2.

Function panditrian(n)

Dim m

m = n

Do Until pandigital(m * (m + 1) / 2)

m = m + 1

Loop

panditrian = m * (m + 1) / 2

End Function

Con esta función encontramos el primer pandigital triangular, 1062489753, de orden 46097. Está publicado en http://oeis.org/A241812, pero es interesante volverlo a encontrar con nuestros propios medios.

De esta forma podemos encontrar cubos, oblongos y otros que sean pandigitales sin repetición.

Por ejemplo, el menor oblongo de diez cifras es 1000045752=31623*31624. Con un pequeño cambio en la función de arriba obtenemos 1492083756=38627*38628 como el menor oblongo pandigital. No está publicado.

En el caso de los cubos, no hemos encontrado ningún ejemplo.

Los tipos que hemos buscado tienen forma polinómica, lo que ha acelerado el proceso. En otros casos la búsqueda sería mucho más lenta.

Existen muchos casos en los que un pandigital es múltiplo de otro, pero su búsqueda es lenta y no la abordaremos. Sí es sencillo buscar un múltiplo pandigital de cualquier otro número menor. En casi todos los casos se encuentra con éxito, e incluso circula por ahí la conjetura de que todos los números poseen un múltiplo pandigital, pero no es cierta, ya que los números terminados en 00 no lo tienen, y también muchos múltiplos de 25.

Con este código PARI encuentras fácilmente un múltiplo pandigital de otro cualquiera menor que 10^9:

multipan(n)={my(e=0,i=1,m=n);while(m<=10^10&&e==0,m=n*i;if(#vecsort(digits(m), , 8)==10,e=m);i+=1);e}

print(multipan(23322))

En el ejemplo se busca el múltiplo de 23322, y resulta ser 1053967824=45192*23322

Si cambias 23322 por otro número, obtendrás su múltiplo pandigital. Si no existe, te devolverá un cero. Prueba con un número terminado en dos ceros.

 

 

jueves, 3 de marzo de 2022

Números de Zumkeller(2) – Otros métodos de búsqueda

En la entrada anterior se diseñó un esquema de cálculo para encontrar las particiones de igual suma, típicas de los números de Zumkeller. El procedimiento, algo lento, consistía en escribir los divisores de un número en columna, acompañarlos sucesivamente con las expresiones binarias de los números 1 a 2TAU-1 y mediante multiplicaciones, conseguir todas las particiones entre divisores:


Se afirmó en la entrada anterior que este esquema, para valores de TAU superiores a 10 o 12, era bastante lento, pero existe una forma de simplificarlo un poco. La idea es que el número estudiado entrará, con toda seguridad, en una de las dos particiones, y acompañado, en general, por menos sumandos que en la otra partición.

Lo explicamos con el desarrollo para 204, cuya factorización es 3*22*17, lo que asegura que es un número de Zumkeller. Sus particiones de igual suma son:

Total divisores: 1+2+3+4+6+12+17+34+51+68+102+204=504

Primera partición: 1+3+4+6+17+51+68+102=252

Segunda partición: 2+12+34+204=252

Los divisores han sido 1, 2, 3, 4, 6, 12, 17, 34, 51, 68, 102, 204

Si observamos la partición más corta, es claro que los sumandos compañeros de 204 no pueden superar la diferencia 252-204=48. Esto excluye a los divisores 51, 68, 102 y el mismo 204. Podríamos entonces cambiar los datos del problema:

  • ·       Los divisores podrían ser 1, 2, 3, 4, 6, 12, 17, 34
  • ·       La suma no tendría que ser 252, sino 48
  • ·       El valor real de TAU, que era de 12 divisores, se puede reducir a 8.

Hemos implementado una segunda hoja en nuestra herramienta http://www.hojamat.es/blog/zumkeller.xlsm duplicando el algoritmo, pero con estas modificaciones. El resultado, en el caso de 204 quedaría así:


Observamos que el valor de TAU ha quedado en 8, por haber eliminado cuatro divisores, 51, 68, 102 y 204 (tres de ellos han quedado como residuales en la parte baja del esquema). También cambia el valor de la suma, que ahora es de 48, y, si observamos las columnas que crean particiones, tan solo llegan hasta el número 34.

Con estos cambios, la velocidad de proceso aumenta, más o menos según la factorización. En el resultado obtenido, la partición que nos interesa es la de menor número de sumandos. En este caso tendríamos:

Total divisores: 1+2+3+4+6+12+17+34=48                         

Primera partición: 1+3+4+6+17=48                            

Segunda partición:  2+12+34=48                      

Si a la segunda partición le añadimos el 204 obtendremos la solución del primer algoritmo:

2+12+34+204=252

Uso de nuestra herramienta “Cartesius”

Esto que sigue es una curiosidad, de la que se puede prescindir. Lo que tiene de importante es que nos puede devolver más de una solución a las particiones de igual suma.

En una entrada nuestra de hace unos cinco años, explicábamos el uso de Cartesius para lograr particiones.

(https://hojaynumeros.blogspot.com/2017/06/cartesius-5-particiones-1.html)

Esta herramienta puedes descargarla desde

http://www.hojamat.es/sindecimales/combinatoria/herramientas/herrcomb.htm#cartesius

En la entrada referida se recomendaba este planteo para lograr una partición concreta, la del 7 en todos sus sumandos posibles:

XRANGO=7

XT=1..7

SUMA=7

CRECIENTE

 

Con algo de lentitud, crea todas las particiones del 7:

Siguiendo las reflexiones de los párrafos anteriores, si elegimos, por ejemplo, el número 60=2*2*3*5, su TAU es igual a 12, y podríamos rebajarla a 10, porque la mitad de sigma es, en este caso, 84. Si le restamos el número 60 nos queda 24, y podemos eliminar los divisores 30 Y 60, con lo que nos quedaría:

  • Divisores válidos: 1, 2, 3, 4, 5, 6, 10, 12, 15, 20
  • Nueva TAU: 10
  • Suma exigida: 24

El planteo adecuado en Cartesius sería

XRANGO=10

XT=1,2,3,4,5,6,10,12,15,20

SUMA=24

CRECIENTE

De esta forma, con bastante lentitud, obtenemos dos soluciones en lugar de una:


Las particiones de igual suma podrían ser

Primera partición: 1+2+3+5+6+10+12+15+30=84              

Segunda partición: 4+20+60=84   

Y también

Primera partición: 3+4+5+10+12+20+30=84             

Segunda partición: 1+2+ 6+15+60=84

Ya se dijo que es una curiosidad, porque la falta de velocidad del proceso no compensa su utilidad, salvo que busquemos números de Zumkeller con varias soluciones.

lunes, 21 de febrero de 2022

Números de Zumkeller(1) – Definición y búsqueda

Quienes visitamos a menudo la La Enciclopedia On-Line de las Secuencias de Números Enteros (OEIS) http://oeis.org conocemos muy bien a Reinhard Zumkeller, uno de los autores que más ha aportado conocimientos a esta página. En 2010 publicó los números que estudiaremos a continuación, y T. D. Noe, otro colaborador muy distinguido les asignó su nombre, y así son ya conocidos, como “los números de Zumkeller”.

A pesar de su reciente publicación, ya existen reseñadas muchas propiedades. Basta buscar en OEIS “Zumkeller numbers”. Aquí, en nuestra modestia, nos limitaremos a lo que sea fácil de implementar en hoja de cálculo. En este caso usaremos Excel.

La definición es muy sencilla de entender: Son números de Zumkeller aquellos en los que sus divisores se pueden repartir en dos conjuntos que tengan la misma suma. No han de contener divisores consecutivos en el orden natural,  ni tener el mismo número de elementos. Un ejemplo:

El número 25122 posee los siguientes divisores:

1+2+3+6+53+79+106+158+159+237+318+474+4187+8374+12561+25122 = 51840

Esta suma de 51840 se puede repartir entre dos particiones de los divisores, de forma que sus sumas sean iguales. Serían estas:

1+2+3+53+79+106+158+159+237+4187+8374+12561 = 25920

6+318+474+25122 = 25920

Le daremos a 25122 el título de número de Zumkeller. No es una condición difícil de cumplir, y la prueba es que estos números aparecen entre los naturales con frecuencias altas. Estos son los primeros:

6, 12, 20, 24, 28, 30, 40, 42, 48, 54, 56, 60, 66, 70, 78, 80, 84, 88, 90, 96, 102, 104, 108,…

(Puedes consultar la página dedicada a estos números en OEIS: http://oeis.org/A083207)

Búsqueda de números de Zumkeller

En la página citada se incluyen códigos en distintos lenguajes de programación para decidir si un número es de Zumkeller o no. Con ellos hemos sabido que 25122 era de ese tipo. Todos se basan en la idea de las particiones de un conjunto, y por la orientación de la página, no se incluyen las dos particiones de igual suma. Eso es lo que se va a estudiar en esta entrada.

Últimamente acudimos a funciones para organizar búsquedas, pero como esa operación ya está bien estudiada, con lenguajes más potentes que Excel, nos ha parecido conveniente regresar a los esquemas de cálculo con botones y macros, de los que está lleno este blog.

La idea que se usará para buscar las dos particiones se basa en que el número de subconjuntos de un conjunto de N elementos es 2N. Cada partición se puede caracterizar por un número binario de N dígitos, en el que 1 puede significar que ese elemento entra en el conjunto y 0 que no entra. De esa forma, buscar particiones equivale a recorrer, en binario, todos los números entre 1 y 2N-1. No consideramos el 0, que devolvería el conjunto vacío. Lo vemos aplicado al ejemplo anterior

Hemos implementado esta idea en la hoja de cálculo zumkeller.xlsm, alojada en nuestra web Hojamat.es

http://www.hojamat.es/blog/zumkeller.xlsm

Su funcionamiento sigue varios pasos:

1) Dado un número entero positivo en la celda correspondiente, la hoja calcula la suma de sus divisores, y si no es par o esa suma no sobrepasa el doble del número, lo rechaza, porque no se puede repartir en dos particiones.

2) Si SIGMA es par se buscan todos los divisores del número, y simultáneamente se van también sumando, para obtener SIGMA de nuevo y contando, para conocer TAU. Este último valor es muy importante, porque determinará en número de subconjuntos a buscar, que será 2TAU-1, según se explicó más arriba. Si descargas la hoja y pides Programador-Visual Basic podrás estudiar el código de las macros. Si no tienes esa barra Programador puedes activarla en las Opciones.

La macro ordenará los divisores en columna, y junto a ellos irá desplegando todos los números en binario desde 2TAU-1 hasta 1. Después multiplicará los divisores por estos unos y ceros para construir una partición. Lo puedes ver en esta imagen:


Se está analizando el número 42. Su SIGMA es par, por lo que se inicia el proceso. El valor de TAU es 8 (no aparece en la imagen)

En la primera columna observamos los divisores de 42, que son ocho. La segunda es auxiliar, y sirve para construir los dígitos binarios. Multiplicando esos dígitos por los divisores se obtiene la cuarta columna, los sumandos de cada partición.

La macro no se detiene hasta que encuentra el valor correcto de suma, que en este caso es 6+42=48. La imagen de arriba se ha podido capturar porque se ha llegado a la detención de la macro. En caso contrario, si no hay solución, se recorren todas las posibilidades sin detención previa.

En caso de llegar a una solución, se reflejarán en la parte derecha las dos particiones con igual suma:


Esta hoja presenta una rapidez aceptable para valores de TAU inferiores a 12 o 15. En el resto de valores deberemos usar la paciencia y dejar a Excel que trabaje solo.

Un número de Zumkeller, como este 42 del ejemplo, será un sumando en una de las particiones, luego la otra tendrá como suma un número igual o superior a él, pero eso significará que el número será perfecto o abundante, porque la suma de su divisores propios será igual o mayor que él. En el caso del 42, sus divisores propios suman 54.

Casos particulares

(1) Se ha demostrado que todos los primoriales (ver en este blog https://hojaynumeros.blogspot.com/2012/02/el-primorial.html), a partir del 6 son de Zumkeller. Vemos un ejemplo, el 210=2*3*5*7:

En estos números TAU es siempre una potencia de 2 (Ver en este blog https://hojaynumeros.blogspot.com/search?q=multiplicativas y siguientes) y sigma es par, como en este caso, que es (1+2)(1+3)(1+5)(1+7)=576

Esto es consecuencia de lo que sigue.

(2) Los números del tipo 3*2k son de Zumkeller. El mismo autor lo explica, y lo adaptamos aquí. Todo se basa en que las funciones SIGMA Y TAU son multiplicativas (ver en este blog la entrada

https://hojaynumeros.blogspot.com/2011/10/funciones-multiplicativas-1.html

para factores coprimos. En este caso, SIGMA(3*2k)=SIGMA(3)*SIGMA(2k) y desarrollando:

Sigma=(1+3)(1+2+4+8+16+…2k)=4*(2k+1-1)

Por ejemplo, en el caso de 96=3*25 será SIGMA(96)=4*(26-1)=4*63=252

La mitad de esa expresión general será 2*(2k+1-1), que coincide con la suma de divisores 3*2k+3*2k-2+…y esa será una de las particiones pedidas. En el caso de 96 equivale a

96+24+6=3*25+3*23+3*21=3*(2*(43-1)(4-1))=2*(26-1)=126

Así que siempre tendremos una partición formada por una serie de divisores con potencias de 2 alternas. Lo vemos con nuestra hoja:

Total divisores: 1+2+3+4+6+8+12+16+24+32+48+96=252

Primera partición: 1+2+3+4+8+12+16+32+48=126

Segunda partición: 6+24+96=126

(3) Si a estos números del tipo 3*2k los multiplico por un número coprimo con 2 y 3, el resultado sigue siendo del tipo Zumkeller.

Es evidente que si multiplico por un coprimo, todas las sumas quedarán multiplicadas y, según R. Gerbicz (ver http://oeis.org/A179527), el producto seguirá siendo de Zumkeller.

Eso ocurre, por ejemplo en 3*11*4=132

Total divisores: 1+2+3+4+6+11+12+22+33+44+66+132=336    

Primera partición: 1+2+4+6+11+12+22+44+66=168

Segunda partición: 3+33+132=168         

Observamos, como era de esperar, que SIGMA contiene todos los divisores de 12 y otros que son sus productos por 11.               

Esto demuestra la primera afirmación de que los primoriales son todos de Zumkeller.

(4) Los números admirables, de reciente publicación en este blog (ver entrada anterior a esta) también son de Zumkeller, porque ellos coinciden con la suma de sus divisores propios cambiando a un divisor de signo, o, lo que es igual restando a SIGMA dos veces este divisor. En este caso, basta sumar ese divisor para obtener las dos particiones. Lo vemos con un ejemplo:

812 es admirable y el divisor que cambia de signo es el 28:

812 =406+203+116+58+29-28+14+7+4+2+1

Si ahora sumamos 812+28=840, esa será la partición “corta”. Lo comprobamos con nuestro esquema:

Total divisores: 1+2+4+7+14+28+29+58+116+203+406+812=1680   

Primera partición: 1+2+4+7+14+29+58+116+203+406=840                 

Segunda partición: 28+812=840             

Estamos llegando al límite de extensión que le doy a mis entradas, por lo que dejo materia para la siguiente.

                   

miércoles, 22 de septiembre de 2021

Números que son sumas de K enteros positivos consecutivos

Recorriendo un poco al azar la página de OEIS (http://oeis.org/) descubrí que existen varias sucesiones en las que sus elementos se pueden descomponer como suma de K enteros positivos consecutivos, pero no en sumas de ese tipo con menor número de sumandos. Hay muchas variantes. Estas son algunas:

http://oeis.org/A270298: En ella figuran los que se descomponen en ocho sumandos, pero no en menos, como es 172=18+19+20+21+22+23+24+25, que es suma de ocho elementos, y veremos más adelante que no es posible una suma con menos sumandos consecutivos.

http://oeis.org/A270296: Contiene los que se descomponen en cinco sumandos pero no en menos, como 20=2+3+4+5+6.

Otra sucesión es http://oeis.org/A270299, para once sumandos, y se pueden encontrar otras para casos diversos.

Aquí abordaremos el tema en general, dando pautas y búsquedas para cualquier valor de K. Comenzaremos estudiando qué números admiten una suma con K sumandos enteros positivos consecutivos y, en otro paso, nos quedaremos con aquellos para los que esa suma tenga el mínimo número de sumandos.

Números que son suma de K sumandos

Si K es impar, el problema es más simple, porque en cualquier suma de ese tipo, como 44+45+46+47+48, con K=5, existe un número central, aquí el 46, y pares de sumandos simétricos cuya suma es el doble del mismo, como 45+47=44+48=2*46, Por tanto, la suma es 5 veces mayor que 46, y ha de ser, por tanto, múltiplo de 5. A la inversa, cualquier múltiplo de 5 se puede organizar como una serie de sumandos alrededor de un central.

Por ejemplo, 42 es múltiplo de 7, y el término central sería 6, con lo que podemos escribir la suma  3+4+5+6+7+8+9=42.

Si K es par, es algo un poco más complicado. Por ejemplo, con cuatro sumandos la suma se podría escribir como n+n+1+n+2+n+3=4n+6. Esto significa que la suma ha de ser par, pero no múltiplo de 4. Quiere decir que se podrán expresar como suma de cuatro consecutivos los múltiplos de 2 que no lo sean de 4.

14 es un ejemplo de suma de cuatro. Al dividirlo entre 4 resulta 3,5 como “falso término central”, y usamos los enteros más próximos: 2+3+4+5. Su doble, 28, sí sería múltiplo de 4. 14 no sería múltiplo, pero su doble sí.

Por otra parte, no basta con estas condiciones, porque algún número daría soluciones con sumandos negativos o nulos. Por ejemplo, para expresar 6 con cuatro sumandos, el falso término central sería 6/4=1,5, y los sumandos 0+1+2+3, con el 0 no positivo.

Para evitar esto se deberá verificar que el término central (verdadero o falso) sobrepase la mitad entera del número de sumandos, con lo que garantizamos que el primer sumando sea al menos 1. En el siguiente apartado veremos una condición equivalente más práctica.

Estudio algebraico

Una suma de K enteros consecutivos a partir de N, es decir, N+N+1+N+2+…N+K-1, se puede resumir como suma de una progresión aritmética:

Si pretendemos dividir la suma entre K, tal como efectuamos en párrafos anteriores, quedaría:

Si K es impar, esta expresión será entera, y nos dará el término central de la suma. Si K es par, resultará el “falso término central”, alrededor del cual se construirán pares de sumandos.

La primera de las igualdades nos indica que, para que el primer término N sea positivo, se ha de cumplir que

En el ejemplo anterior del 6 con 4 sumandos no se cumplirá esto, porque 6=4*3/2, y no se cumple la desigualdad.

Función con hoja de cálculo

Estas consideraciones teóricas se pueden unir en una función que nos indique si un número equivale a K sumandos consecutivos o no:

Function sumacons(n, k) As Boolean ‘Devuelve verdadero o falso

Dim es As Boolean

Dim b, c

If n > k * (k - 1) / 2 Then ‘Condición previa para poder seguir

b = n / k ‘Cociente entre suma y número de sumandos

c = 2 * n / k ‘Doble del anterior

If k / 2 = k \ 2 Then ‘Caso PAR

If b <> Int(b) And c = Int(c) Then es = True Else es = False ‘No es múltiplo de k, pero sí su doble

Else

If b = Int(b) Then es = True Else es = False ‘Caso IMPAR. Basta con que sea múltiplo de k

End If

Else

es = False

End If

sumacons = es

End Function

Si poseemos ya un criterio para saber si N es suma de K sumandos, el siguiente paso sería si también es suma para valores más pequeños que K. Esta es la parte fácil del estudio, porque basta un bucle de búsqueda para determinarlo:

Function sumaconsmin(n, k) As Boolean

Dim es As Boolean

Dim i

es = False

If sumacons(n, k) Then ‘Exigimos que n se exprese como suma de consecutivos

es = True

i = 2

While i < k And es

If sumacons(n, i) Then es = False ‘Si existe un número menor que k para el que es suma, el resultado será FALSO.

i = i + 1

Wend

End If

sumaconsmin = es

End Function

Con esa función de búsqueda se pueden comprobar fácilmente los términos de las sucesiones que enlazamos al principio:

A270298 Numbers which are representable as a sum of eight but no fewer consecutive nonnegative integers.

44, 52, 68, 76, 92, 116, 124, 148, 164, 172, 188, 212, 236, 244, 268, 284, 292, 316, 332, 356,…

COMPROBADO

A270296 Numbers which are representable as a sum of five but no fewer consecutive nonnegative integers.             

20, 40, 80, 100, 140, 160, 200, 220, 260, 280, 320, 340, 380, 400, 440, 460, 500, 520, 560,…

COMPROBADO

A270303 Numbers which are representable as a sum of nineteen but no fewer consecutive nonnegative integers.    

304, 608, 1216, 2432, 4864, 5776, 6992, 8816, 9424, 9728, 11248, 11552, 12464, 13072,…

COMPROBADO

A270297  Numbers which are representable as a sum of seven but no fewer consecutive nonnegative integers.

28, 56, 112, 196, 224, 308, 364, 392, 448, 476, 532, 616, 644, 728, 784, 812, 868, 896, 952, 1036, 1064

COMPROBADO

A270299 Numbers which are representable as a sum of eleven but no fewer consecutive nonnegative integers.             

88, 176, 352, 704, 968, 1144, 1408, 1496, 1672, 1936, 2024, 2288, 2552, 2728, 2816, 2992,…

COMPROBADO

Valores admisibles de K

Si cambiamos los valores de K nos daremos cuenta de que para algunos, como el 10, no existe sucesión. ¿De qué depende? Lo veremos por partes:

Todos los números primos son admisibles para esta cuestión. El 2, porque es el mínimo, y todos los impares son suma de dos consecutivos. El resto, al ser impares admitirán una suma de consecutivos en sus múltiplos, como vimos en párrafos anteriores, y como puedes comprobar en la última sucesión estudiada, en la que todas las soluciones que son suma de once sumandos son todas múltiplos de 11. Este número de sumandos no se puede reducir, al ser primo K, luego los números primos son admisibles y generarán una sucesión como las enlazadas.

Sin embargo, los múltiplos impares de los primos mayores que 2, incluidas sus potencias, no pueden ser admisibles, porque si un número se descompone en pq sumandos (p primo y q impar), también se descompondrá en p sumandos, luego estos números hay que desecharlos para la cuestión que nos ocupa. Por ejemplo, 225 se descompone en 15 sumandos:

225=8+9+10+11+12+13+14+15+16+17+18+19+20+21+22, pero también en 5 y en 3:

225=43+44+45+46+47

225=74+75+76

Sí lo son las potencias de 2. Si un número N se descompone en 2^k sumandos, sabemos, por consideraciones anteriores, que no será múltiplo de 2^k, pero sí lo será su doble. Por tanto, simplificando, N será múltiplo de 2^k-1, y sabemos que no debe serlo, luego sería admisible, como vemos en la sucesión A270298. Otra cuestión es qué números presentan la propiedad que estudiamos hoy. Un ejemplo sería el 44

Un ejemplo: 44 se descompone en ocho sumandos, porque su doble, 88, es múltiplo de 8:

44=2+3+4+5+6+7+8+9

Sin embargo, no se podrá descomponer en menos sumandos. Se comprueba fácilmente.

Nos quedan los números pares no potencias de 2. Si N se descompone como pq con p primo impar y q par, es par, 2N será múltiplo de K, y simplificando, N será múltiplo de p, porque q/2 es entero, luego será múltiplo de p y se podrá descomponer en p sumandos. No serán admisibles.

Resumiendo, serán admisibles para esta búsqueda los números primos y las potencias de 2. Los demás números no serán admisibles para este problema, y serán aquellos que poseen un divisor propio primo e impar.

En cualquier rango de números podemos observar que en la descomposición de N en K sumandos, solo figuran valores de K primos o potencias de 2:

Así que los valores de K que no dan lugar al estudio de esta cuestión serán todos los enteros suprimiendo los primos y las potencias de 2:

6, 9, 10, 12, 14, 15, 18, 20, 21, 22, 24, 25, 26, 27, 28, 30, 33, 34, 35,…

Estos números están publicados en http://oeis.org/A111774, pero con una definición distinta, como aquellos que se pueden descomponer en sumas de al menos tres números consecutivos. Es lógico, porque todos poseen un factor primo impar p y, al ser múltiplos de él, se descompondrán en una suma de p sumandos.

jueves, 2 de septiembre de 2021

Prolongación de una recurrencia

En la confección de sucesiones, que es una de las tareas más frecuentes en este blog, aparecen con cierta frecuencia algunas de las que se sabe o sospecha que pueden generarse mediante una fórmula de recurrencia respecto a sus primeros términos. Así ocurre, por ejemplo, con los números poligonales, que ocupan una buena parte de nuestros estudios, o con aquellas cuestiones que se resuelven con la ecuación de Pell o similares (ecuaciones Pell-like).

Las ecuaciones de recurrencia más frecuentes en estos temas son las lineales, en las que existe una relación de este tipo entre un elemento y varios de sus anteriores. Las llamaremos homogéneas si no intervienen términos independientes. Comenzaremos por ellas.

Sistema de ecuaciones de una recurrencia

Si cada elemento depende de los anteriores, pongamos por ejemplo, de cuatro, y de forma lineal, se dará la siguiente situación:

 a(n)=c1a(n-1)+c2a(n-2)+c3a(n-3)+c4a(n-4)

Si elegimos los ocho primeros términos de la sucesión podremos plantear (en el caso homogéneo)

a(8)=c1a(7)+c2a(6)+c3a(5)+c4a(4)

a(7)=c1a(6)+c2a(5)+c3a(4)+c4a(3)

a(6)=c1a(5)+c2a(4)+c3a(3)+c4a(2)

a(5)=c1a(4)+c2a(3)+c3a(2)+c4a(1)

Esto constituye un sistema de cuatro ecuaciones con cuatro incógnitas c1, c2, c3, c4, que, al resolverse, nos descubre la ecuación de recurrencia. Con los instrumentos de cálculo disponibles en la actualidad es una tarea fácil de sobrellevar.

Pongamos un ejemplo. Los números hexagonales se generan con una ecuación de recurrencia de orden 3. Para encontrarla, ya lo habrás descubierto, necesitamos el doble de elementos, en este caso 6. Buscamos cualquier listado de ellos y seleccionamos 1 , 6 , 15 , 28 , 45 , 66. Por comodidad, llamamos a los coeficientes A, B, C, y queda

66=45A+28B+15C

45=28A+15B+6C

28=15A+6B+C

Resolvemos el sistema y obtenemos A=3, B=-3, C=1, luego los números hexagonales se generan mediante H(n)=3H(n-1)-3H(n-2)+H(n-3). Puedes comprobarlo en la entrada correspondiente en este blog (https://hojaynumeros.blogspot.com/2021/02/numeros-hexagonales-1.html)

 Automatización del proceso

Desde hace años ofrezco en mi página web una calculadora matricial para Excel y Calc (http://www.hojamat.es/sindecimales/aritmetica/herramientas/herrarit.htm#matrices)

Esta herramienta es de propósito general, con varias opciones y posibilidad de programar operaciones. Para no confundir con excesivo material, la he adaptado al problema que nos ocupa, y he situado esa versión en la carpeta propia de este blog.

http://www.hojamat.es/blog/ecurrecurre.xlsm

En el caso de los hexagonales marcamos como orden 3, y escribimos en la fila correspondiente los primeros términos 1 , 6 , 15 , 28 , 45 , 66.

Después pulsamos en el botón “Homogénea” y se construirá el sistema de ecuaciones correspondiente:


Finalmente, pulsamos el botón “Resolver” y obtendremos los coeficientes:

Como es una adaptación de otra herramienta, se aconseja no tocar nada más de la hoja. Si todo se viene abajo, volveremos a iniciar Excel.

Caso no homogéneo

Hay recurrencias lineales que poseen un término independiente. Estos mismos números hexagonales del ejemplo admiten otra recursión de tercer orden con término independiente 4.

a(3)=K+c1a(1)+c2a(2)

a(4)=K+c1a(2)+c2a(3)

a(5)=K+c1a(3)+c2a(4)

Resolvemos y nos resultan los coeficientes como en el caso homogéneo.

En nuestra hoja de cálculo basta pulsar sobre el botón “No homogéneo” y después sobre “Resolver”. En el caso de los hexagonales:


No se debe olvidar rellenar el Orden, en este caso, 3. La solución, después de resolver, queda:

La interpretamos como a(n)=2a(n-1)-a(n-2)+4. En efecto:

15=2*6-1+4

28=2*15-6+4

45=2*28-15+4

 

Otros ejemplos

La recurrencia homogénea que hemos descubierto para los números hexagonales es una propiedad general de todos los poligonales, en los que P(n)=3P(n-1)-P(n-2)+P(n-3). Lo vemos en los octogonales: 1, 8, 21, 40, 65, 96, 133, 176, 225, 280, 341, 408, 481, 560, 645, 736, 833, 936,…

Aquí se inserta la captura de pantalla en la que comprobamos que los coeficientes:


Puedes probar con otros tipos de poligonales, como estos cuadrados centrados, 1, 5, 13, 25, 41, 61, 85, 113, 145,…y te resultarán los mismos coeficientes 3, -3 y 1.

Triangulares cuadrados

Los triangulares que también son cuadrados ( los hemos estudiado en https://hojaynumeros.blogspot.com/2015/10/damos-vueltas-los-triangulares.html) también admiten una recurrencia homogénea de tercer orden. Tomamos su listado y lo volcamos en nuestra hoja de cálculo: 1, 36, 1225, 41616, 1413721, 48024900, 1631432881, 55420693056, 1882672131025, 63955431761796, 2172602007770041,…y resulta:


Efectivamente, TC(n)=35TC(n-1)-35TC(n-2)+TC(n-3), tal como hemos comprobado con los siguientes términos.

Así podríamos recorrer más ejemplos. Como esto es una presentación de una herramienta, con lo explicado basta.

lunes, 12 de octubre de 2020

Números de Saint-Exupéry

Reciben este nombre en la página OEIS (http://oeis.org) aquellos números que coinciden con el producto de los tres lados de una terna pitagórica. El primero, como era de esperar, es 60, que es el producto de 3, 4 y 5, elementos de la terna más sencilla que conocemos. El segundo, 480, es el producto de sus dobles, 6*8*10. Siguen infinitos de este tipo (porque también es infinito el número de ternas), y nuestro objetivo en esta entrada es analizar métodos para encontrarlos.

La idea sencilla es ir construyendo ternas y después tomar nota del producto de sus lados. El inconveniente reside en que así no podemos averiguar si un número cualquiera es de este tipo o no. Si nos preguntan si lo es 238772, no vamos a formar todas las ternas hasta llegar a él. Por eso, como en otras ocasiones, recurriremos a una función que nos responda a esa pregunta.

Algoritmo con fuerza bruta

Esta es la aproximación a un problema con la solemos comenzar en este blog. Fingimos no saber nada de la cuestión y emprendemos una búsqueda sin apoyarnos en ninguna propiedad. Usaremos la siguiente función:

Public Function Saint_Exupery(n)

Dim a, b, c, p, r

Dim s$

a = 3: b = 4: c = 5: p = 60 ‘Iniciamos valores con la terna (3, 4, 5)

s = "" ‘Recogerá soluciones

r = Sqr(n) ‘Tope de búsquedas

While a <= r And s = ""

b = a + 1 ‘Segundo cateto

p = a * b * c ‘Posible número de Saint_Exupery

While b <= r And s = ""

c = n / a / b ‘Tercer cateto

If a ^ 2 + b ^ 2 = c ^ 2 Then s = Str$(a) + Str$(b) + Str$(c) ‘Es terna pitagórica y se publica

b = b + 1

Wend

a = a + 1

Wend

Saint_Exupery = s

End Function

Con esta función podemos responder a la pregunta de si 238772 es del tipo buscado, y la respuesta es que no, porque devuelve una cadena vacía. Más adelante veremos una razón más sencilla, y es que no es múltiplo de 60.

También con ella podemos encontrar los primeros números de Saint_Exupery:

En la tabla siguiente, cada número viene acompañado de la terna de la que es producto:

 

Indirectamente, esta es una forma de ordenar ternas por el producto de sus lados.

No es este un algoritmo rápido. Para llegar a estos resultados se han necesitado 1m y 20s. Pronto veremos una simplificación.

Estos números ya están publicados en OEIS, de donde hemos obtenido su definición:

A057096                            Saint-Exupéry numbers: ordered products of the three sides of Pythagorean triangles.

60, 480, 780, 1620, 2040, 3840, 4200, 6240, 7500, 12180, 12960, 14760, 15540, 16320, 20580, 21060, 30720, 33600, 40260, 43740, 49920, 55080, 60000, 65520, 66780, 79860, 92820, 97440, 97500, 103680, 113400, 118080, 120120, 124320, 130560, 131820, 164640

(http://oeis.org/A057096)


Segundo algoritmo

En el algoritmo de fuerza bruta hemos obviado el hecho de que los lados de la terna han de ser divisores del número de Saint-Exupéry buscado. Si tenemos esto en cuenta, la búsqueda se simplifica bastante. Podemos intentar esta variante:

Public Function Saint2(n)

Dim a, b, c