jueves, 7 de junio de 2018

Números piramidales centrados (3/4)


Piramidales pentagonales centrados


En las entradas anteriores de este blog (puedes consultarlas pulsando en la frase Entradas antiguas de la parte inferior de este texto) estudiamos números piramidales centrados de tres dimensiones con tres o cuatro lados. En esta seguiremos aumentando el número de lados a 5, pero nos limitaremos a una relación esquemática de su construcción, que ya ha sido explicada anteriormente y suponemos que bien entendida, y añadiremos alguna propiedad interesante de cada tipo.


Formación

Lo explicamos de forma esquemática, pues es un procedimiento que hemos desarrollado anteriormente. Insertamos enlaces para una mejor comprensión. Procederemos de la misma forma en los siguientes tipos.

Tomamos los números  poligonales pentagonales centrados:
1, 6, 16, 31, 51, 76, 106, 141, 181, 226, 276, 331, 391, 456, 526, 601, 681, 766, 856, 951, 1051, 1156, 1266, 1381, 1501, 1626, 1756, 1891, 2031, 2176, 2326, 2481, 2641, 2806, 2976,…

http://oeis.org/A005891

http://hojaynumeros.blogspot.com.es/2018/01/poligonales-centrados-2.html

Sobre ellos acumulamos sumas parciales

1, 1+6=7, 1+6+16=23, 1+6+16+31=54,…

Y nos queda

1, 7, 23, 54, 105, 181, 287, 428, 609, 835, 1111, 1442, 1833, 2289, 2815, 3416, 4097, 4863, 5719, 6670, 7721, 8877, 10143,…http://oeis.org/A004068

Extraemos la expresión genera con nuestro interpolador (ver entradas anteriores):



Copiamos los coeficientes de abajo para obtener el polinomio interpolador, y resulta:

P(x)=1+6(x-1)+5(x-1)(x-2)+5(x-1)(x-2)(x-3)/6

Simplificamos en la página de WolframAlpha:



O bien


Es decir:



A partir de la fórmula de Deza (ver entrada anterior) también se obtiene:





Puedes ir engendrando así los términos de la sucesión o usar nuestra calculadora Calcupol, ya presentada en la anterior entrada. Ahora cambiamos el método. Ábrela y concreta en su parte derecha que deseas usar piramidales centrados y marca 5 como orden:



Después escribe un 1 en pantalla y ve usando la tecla PROX paso a paso, y obtendrás la sucesión 1, 7, 23, 54, 105, 181, 287,…Después, con la tecla ANT los puedes recorrer descendiendo hasta el 1. También puedes encontrar un término más alejado. Por ejemplo, con la secuencia de teclas 5 PIRC 30 =  obtendrás el término 30, que resulta ser  22505. Si ahora usas PROX y ANT puedes descubrir los términos más cercanos a él.

Propiedades de estos números

Si los piramidales cuadrados centrados los interpretamos como octaedros, estos pentagonales los podemos convertir en decaedros, es decir en poliedros de diez caras. Así lo interpreta la sucesión de OEIS A004068, como ves en su inicio:

A004068 Number of atoms in a decahedron with n shells.
0, 1, 7, 23, 54, 105, 181, 287, 428, 609, 835, 1111, 1442, 1833, 2289, 2815, 3416, 4097, 4863, 5719, 6670, 7721, 8877, 10143, 11524, 13025, 14651, 16407, 18298, 20329, 22505, 24831, 27312, 29953, 32759, 35735, 38886, 42217, 45733, 49439,…

Como es una cuestión geométrica y el sentido de la palabra decaedro es ambiguo, dejamos esta interpretación en este punto.

Otra interpretación de la fórmula

La expresión general del valor de estos números se puede escribir de otra forma:



Esta, a su vez equivale a


Llegamos a algo interesante, y es que la fórmula se reduce a un cubo y a un número combinatorio.

Relación con la Combinatoria

La última expresión de la fórmula se puede interpretar como una diferencia entre combinaciones con repetición de n elementos tomados de 3 en 3 y las combinaciones de n+1 elementos también de 3 en 3.

Esta consideración nos lleva a una interpretación combinatoria similar a otra que descubrimos para los piramidales centrados de 4 lados.

a(n+1) equivale al número de tripletas (w,x,y) con términos comprendidos en {0,...,n} y tales que x+y>=w. Esta propiedad también es debida a Clark Kimberling.

Antes de razonar nada, lo desarrollaremos mediante nuestra herramienta Cartesius, que construye productos cartesianos condicionados
(http://www.hojamat.es/sindecimales/combinatoria/herramientas/herrcomb.htm#cartesius)

Usaremos este planteo para el caso n=3:

En la primera línea pedimos un producto de tres factores. Después, que pertenezcan al intervalo (0,..3) y, finalmente, que el primero sea menor o igual que la suma de los otros dos.

El resultado es igual a 54 casos, que es el cuarto término de la sucesión. Veamos en detalle los valores de x1:

El valor x1=0 aparece sin restricciones, ya que es menor o igual que cualquier otro elemento. En total 16 veces:



El valor x1=1 ya tiene una restricción, que es (1, 0, 0), luego se presentará 16-1 veces:


De igual forma, x1=2 aparece 16-3=13 veces, donde 3 son las combinaciones que forman las excepciones: (2,0,0), (2,1,0) y (2,0,1)



Por último, el 3 sólo aparecerá en 16-6=10 casos





Se ve, y se puede generalizar fácilmente, que lo que se le va restando a cada 16 un número triangular:

16+16-1+16-3+16-6=64-1-3-6=54

Para n=4 obtendríamos:

5^3=125, luego la expresión que acabamos de obtener se convertiría en
25+25-1+25-3+25-6+25-10=125-(1+3+6+10)=105, como era de esperar. Los números triangulares representan las combinaciones de dos en dos que representan a las excepciones.

La suma de triangulares equivale al número piramidal triangular o tetraedro,  tal como puedes comprobar en nuestra entrada

http://hojaynumeros.blogspot.com.es/2017/04/numeros-piramidales-2-tetraedros.html

En ella vemos que equivale a un número combinatorio


Ajustando índices nos queda la expresión ya vista para los piramidales que estamos estudiando:



Así que la propiedad es cierta.

Todo este estudio nos da otra interpretación geométrica para estos piramidales centrados de orden 5, y es que son la diferencia entre un número cúbico e lado n y un tetraedro de lado n-1.


Suma de valores de un polinomio

Traducimos una propuesta de Reinhard Zumkeller, Nov 11 2012:

Otra expresión para estos números es


En efecto, si sumamos estos términos, obtenemos los piramidales centrados pentagonales:



Para demostrarlo recordemos que la suma de n naturales es n(n+1)/2 y la de sus cuadrados n(n+1)(2n+1)/6. Por tanto, al sumar n^2+nk+k^2 obtendremos:

 PIRC(5,n)=n(n+1)(2n+1)/6-n*n*(n+1)/2+n*n^2

Lo simplificamos en la página de WolframAlpha y nos queda comprobado:


Volvemos a la expresión inicial.

jueves, 31 de mayo de 2018

Números piramidales centrados (2/4)

Piramidales centrados de cuatro lados

Esta es la segunda entrada que trata de los números piramidales centrados. En la anterior tratamos de los triangulares (puedes consultarla bajando un poco las líneas de esta misma entrada). En esta avanzaremos en el número de lados, por lo que seguimos con los cuadrangulares.

Como procedimos con los triangulares, partiremos de los números poligonales cuadrangulares centrados:

1, 5, 13, 25, 41, 61, 85, 113, 145, 181, 221, 265, 313, 365, 421, 481, 545, 613, 685, 761, 841, 925, 1013, 1105, 1201, 1301, 1405, 1513, 1625, 1741, 1861, 1985, 2113, 2245, 2381…http://oeis.org/A001844

Los puedes repasar en la siguiente entrada de este blog:
http://hojaynumeros.blogspot.com.es/2018/01/poligonales-centrados-2.html

Realizamos la acostumbrada construcción de sumas parciales:

1, 1+5=6. 1+5+13=19, 1+5+13+25=44,…

Así conseguimos los números piramidales cuadrangulares centrados:

1, 6, 19, 44, 85, 146, 231, 344, 489, 670, 891, 1156, 1469, 1834, 2255, 2736, 3281, 3894, 4579, 5340, 6181,… http://oeis.org/A005900

Como el uso del interpolador lineal ha sido explicado en la entrada anterior, sólo insertamos el esquema de cálculo:



Resulta el polinomio

1+5(x-1)+4(x-1)(x-2)+2(x-1)(x-2)(x-3)/3

Se simplifica mediante la web de Wolfram|Alpha y obtenemos:



Es decir:



Podíamos haberlo deducido de la fórmula general de Elena Deza y Michel Deza:

Para m=4 queda


Estos números coinciden con los octaédricos, como puedes comprobar en http://oeis.org/A005900. Por tanto, las propiedades que siguen las comparten ambos tipos de números. Puedes encontrar la causa si comparas las dos figuras siguientes. La primera corresponde al número piramidal cuadrangular centrado de orden 3. Por tanto, estará formado por las capas 1+(1+4)+(1+4+8)=19, tal como vimos en la sucesión general.


En la segunda figura hemos desplazado capas hacia abajo, y colocado el centro en la mayor:



Así vemos perfectamente formado el octaedro, que se puede generar con la suma 1^2+2^2+3^2+2^2+1^2=19, como cabía esperar.

Este resultado se puede generalizar sin problemas al término n, lo que nos da la primera propiedad de estos números.

Propiedades

Suma de cuadrados

Los términos de la sucesión que estamos estudiando se pueden calcular mediante la expresión:


Este desarrollo los identifica con los números octaédricos, como ya hemos visto.

Tomamos algún ejemplo:

85=1+4+9+16+25+16+9+4+1
231=1+4+9+16+25+36+49+36+25+16+9+4+1

Productos de sumandos impares

A continuación vemos una interesante propiedad debida a Jon Perry

PIRC4(n) coincide con la suma de todos los productos posibles p*q con p y q impares tales que p+q=2n

Es una consecuencia directa de la primera propiedad:



Si recordamos que un cuadrado es suma de impares consecutivos, obtendremos sumas repetidas que se podrán agrupar en productos:

PIRC4(3)=19=1+1+3+1+3+5+1+3+1=1*5+3*3+5*1
PIRC4(4)=44=1+1+3+1+3+5+1+3+5+7+1+3+5+1+3+1=1*7+3*5+5*3+7*1

Para el caso general no sería difícil ir agrupando los impares.


Como coeficiente de una potencia

Esta propiedad sólo la comprobaremos en algún caso concreto. Pues supone pesados cálculos algebraicos que no hay por qué abordar ahora. Lo dejamos para quién se atreva.

Estos números coinciden con el máximo coeficiente del desarrollo de (1+x+x2+x3+…xk)4

Lo comprobamos para el 44:

Escribimos (1+x+x^2+x^3)^4 en la página de WolframAlpha:


Leemos su desarrollo más abajo:



Comprobamos que el mayor coeficiente es 44.

A continuación insertamos un recorte de pantalla de wxMaxima en el que se comprueba la propiedad para exponente 5:


También aquí el mayor coeficiente es 85, el siguiente elemento de la lista.


Propiedad combinatoria

El número piramidal cuadrangular centrado de orden n equivale al número de conjuntos ordenados (w,x,y,z) con todos sus términos en {1,...,n} tales que w+x=y+z. (Clark Kimberling, Jun 02 2012)

No es difícil razonarlo. Las posibles sumas w+x son 2, 3,…,2n. Sus posibilidades van creciendo al principio y disminuyendo al final. Así:

Suma 2 o suma 2n: w, x tiene 1 posibilidad , (1+1 o n+n);  y+z otra: luego sale 1=1^2

Suma 3 o suma 2n-1: w, x tiene 2 posibilidades, (1+2, 2+1 o n-1+n. n+n-1);  y+z otras 2, luego al combinar ambas posibilidades quedan 4= 2^2

Suma 4 o suma 2n-2: con un razonamiento similar llegaríamos a 3^2

Así seguiríamos, con lo que volvemos a la propiedad básica, y es que el total sería igual a



Como no hay prisa por resolver las cuestiones, comprobamos esta propiedad con nuestra hoja Cartesius:

Con Cartesius

Descargamos la hoja desde
http://www.hojamat.es/sindecimales/combinatoria/herramientas/herrcomb.htm#cartesius

Comprobamos la propiedad para  el caso 6. Para ello planteamos:



Estamos pidiendo que se combinen cuatro elementos (corresponden a w, x, y, z de la propiedad), que deberán estar contenidos en el rango 1..6 y que la suma de los dos primeros x1+x2 coincida con la de los segundos x3+x4.

Desarrollamos el planteo con el botón Iniciar y, efectivamente, resultan 146 casos


Aunque no nos cabe en este documento, podemos, con la función SI seleccionar los resultados cuyos dos primeros elementos sumen, por ejemplo, 5. En el recorte de la imagen asignamos un 1 a los casos en los que w+x=5



Después bastaría contar los unos y nos resultarían 16=4^2, tal como razonamos más arriba.


jueves, 24 de mayo de 2018

Números piramidales centrados (1/4)


En esta entrada generaremos números piramidales a partir de los poligonales centrados. Por eso puede ser conveniente que leas las dos entradas de este blog que tratan dichos números figurados:

http://hojaynumeros.blogspot.com.es/2018/01/poligonales-centrados-1.html
http://hojaynumeros.blogspot.com.es/2018/01/poligonales-centrados-2.html


Al igual que los números poligonales centrados se formaban acumulando contornos de polígonos o de múltiplos de un número, podríamos también acumular estos números poligonales centrados mediante sus sumas parciales. Estas sumas se pueden representar como niveles dentro de una pirámide centrada. Lo vemos en la imagen, que representa las pirámides centradas de tres lados que estudiaremos a continuación:


Son pirámides que contienen en el interior de sus bases los polígonos anteriores.


Pirámides triangulares centradas

Siguiendo un proceso similar al de casos anteriores, partimos de los números triangulares centrados

1, 4, 10, 19, 31, 46, 64, 85, 109, 136, 166, 199, 235, 274, 316, 361, 409, 460, 514, 571, 631, 694, 760, 829, 901,…, ya estudiados en las entradas referidas y en http://oeis.org/A005448

Los acumulamos mediante sumas parciales:

1, 1+4=5, 1+4+10=15, 1+4+10+19=34,… y así hasta completar. De esta forma se generarán los piramidales triangulares centrados

1, 5, 15, 34, 65, 111, 175, 260, 369, 505, 671, 870, 1105, 1379, 1695, 2056, 2465, 2925, 3439, 4010, 4641, 5335, 6095, 6924, 7825, 8801, 9855, 10990, 12209, 13515, 14911, 16400, 17985, 19669,… http://oeis.org/A006003

Los tres primeros se corresponden con la imagen del primer párrafo.

En este caso también podemos usar el interpolador de Newton para los primeros números naturales, que puedes descargar desde http://www.hojamat.es/sindecimales/aritmetica/herramientas/herrarit.htm#newton

Rellenamos los valores de la función con los primeros términos 1, 5, 15, 34, 65, 111, 175 y leemos los coeficientes en la parte inferior:



El polinomio interpolador será

1+4(x-1)+3(x-1)(x-2)+(x-1)(x-2)(x-3)/2

Simplificamos mediante la web de Wolfram|Alpha y obtenemos



Este es un caso particular de la fórmula contenida en el libro Figurate Numbers, de Elena Deza y Michel Deza, que sólo incluimos como comprobación, ya que nos interesa la generación de cada caso particular. Es esta:


Particularizando para m=3 resulta la que hemos obtenido.

Por ejemplo, PIRC3(9)=9*82/2=369, que es el noveno término de nuestra lista de más arriba.
La expresión que hemos obtenido coincide con la que figura en http://oeis.org/A006003

Uso de Calcupol

Pasamos a usar nuestra calculadora Calcupol, (http://www.hojamat.es/sindecimales/aritmetica/herramientas/herrarit.htm#figurados) cuyas prestaciones hemos ampliado con la inserción de una nueva tecla que gestiona estas pirámides centradas



Su funcionamiento es similar a las dedicadas a números poligonales y otros piramidales: escribimos el orden m (que en este caso valdría 3), después pulsamos la tecla PIRC con el ratón, escribimos el valor de n, por ejemplo 7, y terminamos con la tecla =. Nos resultaría, en este caso del 7, el valor de 175, que coincide con el séptimo término de la sucesión que estamos estudiando:




Propiedades

Desarrollamos a continuación algunas propiedades de estos números. Comenzamos con una de Felice Russo incluida en http://oeis.org/A006003

Se expresa así:

Si escribimos los números naturales en grupos de longitud progresiva desde el 1, es decir, formamos: 1;  2,3;  4,5,6;  7,8,9,10;… y sumamos cada grupo, obtenemos los piramidales que estamos estudiando:

1=1
2+3=5
4+5+6=15
7+8+9+10=34
11+12+13+14+15=65
…
No es difícil justificarlo. Basta observar que la suma de enteros consecutivos desde 1 hasta k es el número triangular k(k+1)/2, luego los grupos formados tendrán como suma la diferencia entre el triangular correspondiente al último término y el del anterior grupo. Así, 7+8+9+10=T(10)-T(6)=10*11/2-6*7/2=55-21=34, como era de esperar.

Sólo hay que advertir que los índices de esos triangulares son a su vez triangulares también, 10=4*5/2 y 6=3*4/2, y además consecutivos. Esto nos permite plantearlo con la variable x:

S(x)=T(x(x+1)/2)-T(x(x-1)/2) = (x(x+1)/2)*(x(x+1)/2+1)/2-(x(x-1)/2)*(x(x-1)/2+1)/2

Acudimos de nuevo a Wolfram|Alpha para simplificar y comprobamos:



Nos resulta la fórmula esperada de estos piramidales centrados, luego la propiedad es cierta.


Propiedad combinatoria

Los piramidales centrados que estamos estudiando son suma de tres números combinatorios a partir del 15:



Basta desarrollar: ((n)(n-1)(n-2)+(n+1)(n)(n-1)+(n+2)(n+1)(n))/6=
=n/6*(n2-3n+2+n2-1+n2+3n+2)
=n/6*(3n2+3)=(n3+n)/2

Significa que si recorremos la cuarta diagonal del triángulo aritmético y sumamos de tres en tres, resultarán los números que estamos estudiando:

En una imagen tomada de la Wikipedia hemos señalado los números que debemos sumar:



Así, 1+4+10=15, 4+10+20=34, 10+20+35=65,…

Relación con los triangulares


(Bruno Berselli, Jun 07 2013)

Es claro su significado: Si a un número triangular le sumamos el anterior multiplicado por el número de orden del primero, resulta un piramidal triangular centrado.

Así 3+2*1=5, 6+3*3=15, 10+4*6=34…

En forma de tabla:



Se ha destacado en rojo el cálculo: multiplicar el anterior por el número de orden y sumar el actual triangular.

Se demuestra con un simple desarrollo:

T(n)+nT(n-1)=n(n+1)/2+n*(n-1)*(n)/2=n/2*(n+1+n2-n)=n/2(n2+1)=(n3+n)/2

Llegamos a la misma expresión ya conocida.


miércoles, 16 de mayo de 2018

Productos de tres divisores (3/3)



En la tercera entrada de esta serie (puedes consultar las anteriores fácilmente en el blog) seguiremos intentando descubrir algunas propiedades curiosas que se pueden deducir de la descomposición de un número natural en tres factores también naturales.

Haremos alguna referencia a funciones o rutinas ya explicadas en las dos entradas anteriores.

Variantes

Cambiando adecuadamente las líneas de código de la función trifactor podemos descubrir algunas propiedades de cada terna de factores. Vemos algunas

Sumas pitagóricas

Puede ocurrir que los tres factores sean parte de un conjunto pitagórico de tres dimensiones (lados de un ortoedro y su diagonal). Aquí tienes los primeros:



Por ejemplo, 108 presenta tres descomposiciones pitagóricas:

108=1*6*18, y 12+62+182=361=192
108=2*6*9, y 22+62+92=121=112
108=3*6*6, y 32+62+62=81=92

Puedes comprobar, para practicar, las tres posibilidades que presenta 256.

Estos números están publicados en http://oeis.org/A118901

A118901 Volumes of cuboids with integer sides and main diagonal.

4, 32, 36, 108, 112, 140, 144, 220, 252, 256, 288, 364, 396, 400, 500, 540, 608, 612, 644, 756, 832, 864, 896, 900,…

El texto explicativo en inglés identifica los tres factores como los lados enteros de un ortoedro con diagonal también entera, y los términos de la sucesión se corresponden con los volúmenes.

Con la hoja trifactor.xlsm basta añadir otra columna y elegir las hipotenusas sin decimales. En la siguiente imagen lo hemos probado con el número 256:



Suma cuadrada

En lugar de buscar una hipotenusa, podemos elegir las sumas de factores que sean cuadradas. Aquí tienes el resultado:



Hemos acompañado a cada número los factores cuya suma es un cuadrado y junto a ellos esa suma. Por ejemplo:

44=1*2*22, S=1+2+22=25=52
62=1*1*62, S=1+1+62=64=82

Se observa que varios números presentan dos soluciones. El 128 es el primer número con tres soluciones: 1* 8* 16, S=25;  2*2*32, S=36; 4*4*8, S=16

Si deseas practicar con elementos de programación, puedes estudiar y mejorar el código en PARI que se ha usado.

for(n=1, 300, t=0; v = truncate(n/2); for(i = 1, v, if(n%i == 0, for(j = i, v,  if(n%j == 0, k = n/(i*j); if(k == truncate(k)&&n%k == 0&&k >= j, if(issquare(i+j+k), t = 1)))))); if(t == 1, print1(n,", ")))


Otras propiedades

Una vez que sabemos alinear bien en una hoja de cálculo todas las ternas de factores cuyo producto es un número dado, con pequeños cambios de código descubriremos otras propiedades. Insertamos algún ejemplo:

Suma prima

Estos son los primeros números cuyas sumas de “trifactores” es prima:



Vemos que, por ejemplo, el 36 posee tres soluciones:
36=1*6*6, S=13; 36=2*2*9, S=13; 36=2*3*6, S=11

Suma capicúa

Esta propiedad da lugar a menos casos. Se ve que resulta más exigente:



Suma cúbica

Por último, aunque se pueden buscar más propiedades, listamos los números cuyos factores suman un cubo:




ANEXO

Function igualsum_trifactor$(n)
Dim i, j, k, v, t, ns, cs
Dim s(100)
Dim ss$

ns = 0
t = 0
v = n / 2
For i = 1 To v
If n / i = n \ i Then
For j = i To v
If n / j = n \ j Then
k = n / i / j
If k = Int(k + 0.0001) Then
If n / k = n \ k And k >= j Then
ns = ns + 1
s(ns) = i + j + k
t = t + 1
End If
End If
End If
Next j
End If
Next i
ss = "": cs = 0
For i = 1 To ns
For j = 1 To i
If i <> j And s(i) = s(j) Then
cs = cs + 1
ss = ss + " " + Str$(s(i))
End If
Next j
Next i
ss = Str$(cs) + " : " + ss
ss = Right$(ss, Len(ss) - 1)
igualsum_trifactor = ss
End Function

lunes, 7 de mayo de 2018

Productos de tres divisores (2/3)


En la entrada anterior presentamos unos algoritmos de complejidad creciente en el problema de descomponer un número en tres factores enteros positivos, y lo organizamos para hacer notar la conveniencia de no acudir por sistema a cálculos de “fuerza bruta”, en los que aprovechamos la potencia de cálculo de nuestro equipo informático, sin analizar previamente otros métodos más eficientes. En esta otra entrada lograremos que los resultados residan en la misma hoja de cálculo, para así poderlos manipular más adelante.

Conversión en subrutina

Supongamos que poseemos la lista de divisores del número dado. En nuestros cálculos usamos la función LISTADIV, de diseño propio, pero se basa en otras funciones algo complejas que requieren un entorno distinto a una entrada de blog. No obstante, existen muchas herramientas en Internet que nos pueden proporcionar esa lista. Últimamente acudimos a la página de WolframAlpha. Le podemos pedir los divisores de 4218:



El resultado será:



Es muy probable que conozcas otras herramientas, como Wiris, WxMaxima u otra similar que te ofrezca la lista de divisores. Desde aquí te podemos ofrecer nuestro Buscador de Naturales, alojado en

http://www.hojamat.es/sindecimales/divisibilidad/herramientas/herrdiv.htm#buscador

Si lo descargas, habilita contenido y macros. Basta observar la imagen para entender su funcionamiento:



Hemos diseñado una búsqueda entre 1 y 4218, borrado las condiciones y añadida la de DIVISOR 4218. Con esto, obtenemos los 16 divisores deseados:



La ventaja de usar el Buscador es que nos devuelve el resultado en columna y en formato de hoja de cálculo. A partir de ella, con Copiar-Pegar podemos abordar otros desarrollos. El primero, que es el que da título a este apartado, es el de convertir la función trifactor en una subrutina tal que dada la columna de divisores, nos devuelva el conjunto de las descomposiciones en tres factores. Así lo hemos efectuado en la hoja de cálculo trifactor.xlsm, que puedes descargar desde

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

En ella aparecen los factores ocupando celdas distintas, lo que propicia su estudio posterior. En la imagen puedes reconocer la propiedad con la que comenzamos esta serie de entradas, y es que 4218 presenta productos con la misma suma de factores, 132 y 96:



Omitimos el código de la subrutina, ya que coincide con la función trifactor salvo la escritura y lectura de celdas. Lo puedes estudiar si abres la hoja que ofrecemos y eliges Programador – Visual Basic




A la derecha de la pantalla tendrás la subrutina trifactor:



(La imagen no abarca toda la rutina)

Búsquedas de números

La hoja trifactor no permite buscar números con propiedades similares a la del 4218 (poseer dos sumas de factores iguales). Por ello, volveremos a la función trifactor, que iremos modificando según la propiedad que nos interese.
En primer lugar diseñamos la función igualsum_trifactor(n), que nos devuelve el número de pares de igual suma entre las descomposiciones en tres factores.

No es bueno incluir demasiados códigos nuevos, por lo que insertamos el suyo en el Anexo de la tercera entrada de la serie. Con ella se puede descubrir, por ejemplo, que entre 1 y 100 sólo existe un número que presente sumas iguales, y es el 90, cuyos factores pueden sumar 16 o 20 dos veces. En la imagen lo puedes comprobar:



Las sumas repetidas son 2+3+15=1+9+10=20 y 3+3+10=2+5+9=16
En concreto, estos son los primeros números que presentan repeticiones en sus productos (se cuentan pares, de forma que si existen tres sumas iguales se contarán como tres pares)



Entre estos números figura el 546 que ya analizamos.

Estos resultados se pueden comprobar con la hoja trifactor.xlsm que presentamos más arriba. Sin embargo, podemos proponer el uso de nuestra hoja Cartesius

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

En ella podemos definir una etiqueta nueva en la hoja “Etiquetas” que haga referencia a los divisores del número que estemos estudiando. Elegimos el 360, que presenta muchos pares de sumas iguales, y la encabezamos con la etiqueta DIV


Después se programan las condiciones


En las condiciones (siguiendo su orden) pedimos que sean tres los factores, que abarquen del 1 al 24, que es el número de divisores de 360. Seguidamente se indica que los datos figuran en la etiqueta DIV, exigimos que el producto de los tres sea 360 y que figuren en orden creciente.

Con este planteo se obtienen 32 productos distintos



Junto a ellos podemos calcular su suma, y comprobar si resultan cinco pares de resultados iguales. En esta imagen parcial de la tabla de sumas se han destacado en negrita los cinco pares de sumas iguales:



En la siguiente entrada descubriremos nuevas propiedades.

viernes, 27 de abril de 2018

Productos de tres divisores (1/3)

En el año 2009, dentro de este blog Números y hoja de cálculo, proponía como investigación en el aula la descomposición de un número natural en producto de tres factores también naturales de todas las formas posibles. No daba pistas para conseguirlo, pues deseaba que el alumnado discutiera posibles métodos empíricos para resolver la cuestión.

Incluyo el enlace a esa entrada:

http://hojaynumeros.blogspot.com.es/2009/07/descomponer-un-numero-en-tres-factores.html

En la siguiente entrada proponía una herramienta más general para comprobaciones, pero ya totalmente diseñada, y sugería su funcionamiento:

http://hojaynumeros.blogspot.com.es/2009/07/descomponer-un-numero-en-tres-factores_05.html

Por otra parte, el día 4/2/18 propuse una propiedad del número 4218 sobre descomposiciones similares, en tres factores.

4218 se puede descomponer en dos productos de tres factores con la misma suma de dos formas diferentes:

4218=1×57×74=2×19×111, con 1+57+74=2+19+111=132
4218=2×37×57=3×19×74, con 2+37+57=3+19+74=96

Esto me ha animado para profundizar en el tema de la descomposición en tres factores, pero desde el punto de vista algorítmico, y como ya viene siendo costumbre en este blog, abordando primero la cuestión usando algoritmos de “fuerza bruta”, sin análisis previos, para después ir profundizando en el tema hasta el límite que seamos capaces de alcanzar.

Fuerza bruta

Supondremos que todos los productos que buscamos poseerán sus factores ordenados en orden creciente. Esto no restringe el problema y nos permite simplificar los procesos.

Siempre que se tengan que combinar tres variables, aquí i*j*k=N, la primera idea que surge es el empleo de tres bucles anidados FOR-NEXT. Es un método lento, porque ha de recorrer muchos valores inútiles, aparte de la multiplicación de casos que se producen al combinar unas variables con otras.

En este caso, si dado un número N, admitimos como seguro el producto 1*1*N, podemos acotar las variables i, j y k mediante N/2, que sería el máximo divisor propio posible de N (evidentemente sería menor si N es impar). Así lo haremos con la primera variable, que recorrerá los valores desde 1 hasta N/2, sabiendo que después habrá que añadir el caso 1*1*N, que no se producirá.

La segunda variable j puede recorrer el intervalo entre el valor de la primera y N/2. Así conseguimos que sólo aparezcan productos en orden creciente.

Igualmente efectuaremos con la tercera variable k.

Hemos diseñado una función, trifactor(n), que nos devuelve la lista de los productos posibles, precedida del número de ellos. Es de tipo string, ya que alojará texto.

Function trifactor$(n) ‘La definimos como string o  texto
Dim i, j, k, v, t
Dim s$

s$ = "" ‘El resultado se inicia en un texto vacío
t = 0 ‘Contador de productos
v = n / 2 ‘Cota para los factores
For i = 1 To v
If n / i = n \ i Then ‘Comprueba que el valor de i es divisor de n
For j = i To v
If n / j = n \ j Then ‘El segundo valor también es divisor
For k = j To v
If n / k = n \ k Then ‘Tercer valor como divisor
If i * j * k = n Then s = s + Str$(i) + "*" + Str$(j) + "*" + Str$(k) + " , ": t = t + 1
‘Si el producto es N, incorporamos el resultado e incrementamos el contador
End If
Next k
End If
Next j
End If
Next i
s = Str$(t) + " resultados: " + s
trifactor = s
End Function


Por ejemplo, trifactor(546)=”13 resultados:  1* 2* 273 ,  1* 3* 182 ,  1* 6* 91 ,  1* 7* 78 ,  1* 13* 42 ,  1* 14* 39 ,  1* 21* 26 ,  2* 3* 91 ,  2* 7* 39 ,  2* 13* 21 ,  3* 7* 26 ,  3* 13* 14 ,  6* 7* 13,”

De esta forma disponemos de todas las soluciones en modo texto. Hay que acordarse de añadir 1*1*546. Si no nos convence esta opción, bastará cambiar la instrucción  v=n/2 por v=n. De esa forma la función será más lenta de cálculo, pero evitaremos que se nos olvide un producto.

La herramienta que propuse hace nueve años, alojada en

http://www.hojamat.es/sindecimales/divisibilidad/herramientas/hojas/enfactores.ods
http://www.hojamat.es/sindecimales/divisibilidad/herramientas/hojas/enfactores.xls

daba las soluciones sin tener en cuenta el factor 1. Puedes usarla para comprobaciones.



Fuerza “menos bruta”

En este algoritmo estamos usando tres bucles FOR-NEXT, pero, en realidad, basta con dos, ya que si conocemos los valores de i y de j, el de k puede obtenerse mediante una simple división: k=N/i/j. Pero esto tiene un coste en condiciones, ya que i*j puede que no sea divisor de N, por lo que hay que exigir que k sea entero y divisor de N. Además, deseamos que k sea igual o mayor que las otras variables. A pesar de estas condiciones, el algoritmo ganará en velocidad. Puede quedar así:

Function trifactor$(n)
Dim i, j, k, v, t
Dim s$

s$ = ""
t = 0
v = n / 2
For i = 1 To v
If n / i = n \ i Then
For j = i To v
If n / j = n \ j Then
k = n / i / j ‘Sustituimos el tercer bucle por un cociente
If k = Int(k + 0.0001) Then ‘Exigimos que sea entero, divisor de N y mayor o igual que j
If n / k = n \ k And k >= j Then s = s + Str$(i) + "*" + Str$(j) + "*" + Str$(k) + " , ": t = t + 1
End If  ‘El resto del algoritmo queda igual
End If
Next j
End If
Next i
s = Str$(t) + " resultados: " + s
trifactor = s
End Function

Da un resultado más en el ejemplo, el 1*1*546

“14 resultados:  1* 1* 546 ,  1* 2* 273 ,  1* 3* 182 ,  1* 6* 91 ,  1* 7* 78 ,  1* 13* 42 ,  1* 14* 39 ,  1* 21* 26 ,  2* 3* 91 ,  2* 7* 39 ,  2* 13* 21 ,  3* 7* 26 ,  3* 13* 14 ,  6* 7* 13,”

Como esta versión mejora bastante la anterior, la hemos traducido a PARI. Sólo tienes que escribir el valor de N, en este caso 546, al principio del código: n=546

n=546;v=truncate(n/2);for(i=1,v,if(n%i==0,for(j=i,v, if(n%j==0, k=n/(i*j);if(k==truncate(k)&&n%k==0&&k>=j,print(i,"*",j,"*",k))))))

Como era de esperar, nos produce el mismo resultado, pero con productos separados, no en forma de string.

En las dos entradas siguientes desarrollaremos más herramientas y cuestiones sobre este tema.