Mostrando entradas con la etiqueta Regresos. Mostrar todas las entradas
Mostrando entradas con la etiqueta Regresos. Mostrar todas las entradas

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.

miércoles, 6 de septiembre de 2023

Regresos 8 – Diferencia entre Catetos

En el año 2010 se publicó en este blog una entrada dedicada a los números

1, 7, 17, 23, 31, 41, 47, 49, 71, 73, 79 (https://hojaynumeros.blogspot.com/2010/10/1-7-17-23-31-41-47-49-71-73-79-primera.html), relacionados con las diferencias entre catetos en una terna pitagórica.

También se estudió el caso de los catetos consecutivos en tres entradas sobre “Oblongos y pitagóricos”

 (https://hojaynumeros.blogspot.com/2010/03/oblongos-y-pitagoricos-1.html y siguientes)

En estas entradas se llegó a que las diferencias entre catetos en ternas primitivas sólo pueden ser 1, 7, 17, 23, 31, 41, 47, 49, 71, 73, 79, 89, 97, 103, 113, 119, ...(http://oeis.org/A058529), que se caracterizan porque sus factores primos son del tipo p=8k+1 o p=8k-1.

Como en otras ocasiones, la disponibilidad de nuevas técnicas y herramientas nos lleva a regresar a ellos, ampliando el tema de las diferencias entre catetos. Damos algunas vueltas más a estas cuestiones.

Función para encontrar catetos con una diferencia dada

El primer paso para comprender el problema es tener en cuenta que lo que pretendemos es resolver esta ecuación para valores enteros positivos:

x²+(x+k)²=y²

Creamos una función de texto que devuelve las primeras soluciones respecto a k

function catetos_ligados$(k)
dim x,y
dim s$

x=3
s$=""
while x<500
y=x^2+(x+k)^2
if escuad(y) then ‘Es una solución
y=sqr(y)
s=s+"## "+str$(x)+", "+str$(x+k)+", "+str$(y)+" " ‘Se publica
end if
x=x+1
wend
if s="" then s="NO"
catetos_ligados=s
end function

Con esta función obtenemos los resultados para k=7

5,  12,  13
8,  15,  17
21,  28,  35
48,  55,  73
65,  72,  97
140,  147,  203
297,  304,  425
396,  403,  565

Si le pedimos tan solo el valor de x, resultará la sucesión

 5,  8,  21,  48,  65,  140,  297,  396,  833,  1748,  2325,  4872,  10205,  13568,  28413,  59496,  79097…

Esta sucesión coincide con la publicada en https://oeis.org/A076296

A076296              Consider all Pythagorean triples (X,X+7,Z); sequence gives X values.   

-3, 0, 5, 8, 21, 48, 65, 140, 297, 396, 833, 1748, 2325, 4872, 10205, 13568, 28413, 59496, 79097, 165620, 346785, 461028, 965321, 2021228, 2687085, 5626320, 11780597, 15661496, 32792613, 68662368, 91281905, 191129372, 400193625, 532029948, 1113983633

Esta sucesión posee infinitos términos, pues, según vimos en las entradas a las que regresamos, se cumple lo siguiente:

Si u y v engendran una terna pitagórica mediante las fórmulas 2uv, u2-v2 y u2+v2, los valores 2u+v y u engendran otra terna con la misma diferencia de catetos.

Así, el  primer ejemplo conseguido con diferencia 7, (5, 12,13) se ha generado con 32+22=13, 2*3*2=12 y 32-22=5, con lo que producirá también diferencia 7 el par de valores u=2*3+2=8 y v=3

Quedaría 82+32=73, 82-32=55 y  2*8*3=48, es decir, la terna (48, 55, 73), con diferencia entre catetos de 7, que figura en el listado.

Reiterando el procedimiento resultarían tantas ternas como deseáramos.

Estudio algebraico

Desarrollamos la ecuación correspondiente a la diferencia 7:

x2+(x+7)2=y2

2x2+14x+49=y2

4x2+28x+98=2y2

(2x+7)2+49=2y2

Si cambiamos de variable: u=2x+7, nos queda 2y2-u2=49

De esta forma se justifica la relación con los contenidos de las entradas referidas más arriba, porque tratamos con las soluciones de una ecuación del mismo tipo 2x2-y2=k, con lo que podemos aplicar lo que conocemos de ella.

Primera recurrencia

La ecuación 2x2-y2=k2 la escribiremos mejor como x2-2y2=-k2, para destacar que es del llamado tipo-Pell, pues puede basarse en esa famosa ecuación x2-Dy2=1, que tiene solución si D no es cuadrado perfecto (ver en este blog https://hojaynumeros.blogspot.com/2010/02/ecuacion-de-pell.html) y que es parecida a ella.

La ecuación que nos ocupa no es de ese tipo, por lo que su resolución es más complicada, pero existe una estrategia, si se dispone de una solución particular, para generar más soluciones (quizás no todas). Consiste en aplicar la recurrencia propia de la ecuación de Pell (aunque la que tratamos sea solo tipo-Pell), que copiamos de la entrada referida:

Xn+Yn√D = (Xn-1+Yn-1√D) (X0+Y0√D)

En este caso disponemos de la primera terna (5,  12,  13), y sabemos ya que si hacemos u=2x+7, se cumple que 2y2-u2=49, con lo que, cambiando la variable, Xn=2*5+7=17 e Yn es la hipotenusa 13 de esa terna, y ambas cumplen 172-2*132=-49, luego (17, 13) es una solución particular (Xn,Yn).

Ahora hay que tomar como (X0,Y0) una solución de la ecuación de Pell x2-2y2=1, que claramente puede ser (3, 2). Todo esto parece complicado, pero repasando se entiende. Resumimos:

(Xn,Yn) es una solución de x2-2y2=-49, y podemos elegir el par (17,13)

(X0,Y0) es una solución de x2-2y2=1, y elegimos (3,2)

Según nuestra entrada referida, separando términos queda:

Xn = Xn-1X0+Yn-1Y0D

Yn = Xn-1Y0+Yn-1X0

En nuestro caso

Xn = 3Xn-1+2*2Yn-1

Yn = 2Xn-12+3Yn-1

Así podemos buscar otras soluciones a partir de 17 13.

Lo hemos intentado y resulta que nos devuelve todas las soluciones que deseemos, pero partiendo de Xn nos lleva a Xn+3. En la siguiente tabla lo destacamos:


La zona amarilla destaca las soluciones que no se obtienen por recurrencia. Las dos columnas centrales se han obtenido con la recurrencia explicada, a partir de (17, 13). El valor de X se obtiene de u=2x+7 o x=(u-7)/2, y el del otro cateto, restando 7 unidades a X.

Hemos comprobado que esta recurrencia nos devuelve más ternas, y se puede aplicar a cualquier otro valor de K.

Otros aspectos del problema

También se cumple que u2+72=2y2 por lo que u pertenece a https://oeis.org/A076293, ya que  la media cuadrática de los dos cuadrados, u2 y 72 es entera. Esto ocurrirá en general, para un valor k adecuado de la diferencia: u2+k2=2y2, con lo que u=2x+k siempre pertenecerá a esa sucesión.

Si nos limitamos a ternas pitagóricas primitivas, un cateto podría representarse com u2-v2 y el otro como 2uv, según un procedimiento muy conocido. En este caso, salvo quizás el signo, se cumplirá que u2-v2-2uv=k, o bien:

(u-v)2-2v2=k

Según las propiedades de estas ternas, las bases de los dos cuadrados han de ser de distinta paridad y números primos entre sí. Por eso k ha de ser impar. Esto justifica el que los valores de k posibles han de pertenecer a la sucesión 1, 7, 17, 23, 31, 41, 47, 49, 71, 73, 79,…pues estos son las soluciones de la ecuación x2-2y2=k, similar a la obtenida con cambios de variables adecuados. En https://oeis.org/A058529 se explica su propiedad de tener sólo factores primos del tipo 8k+1 o del 8k-1.

Una propiedad interesante derivada de todo lo anterior es que si un valor de k es válido para ser diferencia de catetos, también los es k2, porque ambos son soluciones de una ecuación del tipo x2-2y2=k. Lo hemos comprobado con la función catetos_ligados. En la imagen se refleja esta propiedad en el caso de k=71:

 


Segunda recurrencia

En OEIS A076296 se propone una ecuación de recurrencia para los valores X del cateto menor en el caso ya estudiado de k=7. Es esta:

 a(n)=6*a(n-3)-a(n-6)+14.

La hemos comprobado con nuestra herramienta ecurrecurre (ver  listado de herramientas para el blog en http://www.hojamat.es/sindecimales/otros.htm) en el apartado de recurrencias no homogéneas.

En esta captura de pantalla se pueden comprobar los coeficientes 6, -1, 14

 


Hemos copiado los términos de tres en tres.

Este resultado nos anima a probar cono otros valores posibles de k. El siguiente es 17. En primer lugar, hemos creado la sucesión de lados de las ternas usando nuestra función para VBasic:

##  7,  31,  25 ##  28,  73,  53 ##  51,  119,  85 ##  88,  193,  137 ##  207,  431,  305 ##  340,  697,  493 ##  555,  1127,  797 ##  1248,  2513,  1777 ##  2023,  4063,  2873 ##  3276,  6569,  4645 ##  7315,  14647,  10357 ##  11832,  23681,  16745 ##  19135,  38287,  27073 ##  42676,  85369,  60365

A continuación hemos seleccionado los catetos menores de tres en tres (los que aparecen en negrita). Los hemos volcado como datos en ecurrecurre, eligiendo el caso de “No homogénea”. El resultado confirma nuestra intuición. Se mantienen los coeficientes y el término independiente resulta ser 2k, como en el caso de k=7:

 

No es de extrañar el valor de 34, ya que, en realidad, todas estas sucesiones están ligadas con https://oeis.org/A076293, que contiene los valores de 2x+k, según vimos más arriba. En esta sucesión la recurrencia es homogénea: a(n)=6a(n-3)-a(n-6), según hemos comprobado también. Por eso se produce un desfase entre ambas sucesiones, que se traduce en el término independiente 2k.

Sea x(n)=(a(n)-k)/2. Podemos manipular la ecuación de recurrencia:

a(n)-k=6(a(n-3)-k)-(a(n-6)-k)+4k

(a(n)-k)/2=6((a(n-3)-k)/2)-(a(n-6)-k)/2+2k

Y queda x(n)=6x(n-3)-x(n-6)+2k

Hemos demostrado que los valores de X para cualquier valor de k se pueden encontrar mediante la recurrencia a(n)=6a(n-3)-a(n-6)-2k, basándonos en que los términos de https://oeis.org/A076293 se generan con esta otra: a(n)=6a(n-3)-a(n-6).

viernes, 2 de diciembre de 2022

Regresos 6 – Oblongos y pitagóricos (2)

 En esta entrada seguimos trabajando con los valores de N tales que N y N+1 son catetos en una terna pitagórica y abrimos otras posibilidades.

Relación con triangulares

Área triangular y oblonga

Ya se comentó en la anterior entrada que el área del triángulo rectángulo de catetos N y N+1 es un número triangular. En la sucesión que nos ocupa, las áreas son las siguientes (prescindimos del cero):

6, 210, 7140, 242556, 8239770, 279909630, 9508687656, 323015470680, 10973017315470,…

Están contenidas en http://oeis.org/A029549

En mi entrada  de blog

 http://hojaynumeros.blogspot.com/2021/05/triangulares-que-son-oblongos.html)

Se llega a la misma sucesión si exigimos que unos números sean triangulares y oblongos a la vez


En la parte inferior de la imagen se puede leer el código PARI usado.

Estas áreas están publicadas en http://oeis.org/A029549

A029549    a(n + 3) = 35*a(n + 2) - 35*a(n + 1) + a(n), with a(0) = 0, a(1) = 6, a(2) = 210.   

0, 6, 210, 7140, 242556, 8239770, 279909630, 9508687656, 323015470680, 10973017315470, 372759573255306, 12662852473364940, 430164224521152660, 14612920781245825506, 496409142337836914550, 16863297918705209269200

Resumimos la situación en la siguiente tabla, en la que en la última columna figuran las expresiones del área como número oblongo.

Por tanto, las hipotenusas de estas ternas son números triangulares y también oblongos, es decir, son el doble de otro triangular.

Otras diferencias entre catetos

Si tomamos la terna 3, 4, 5 y multiplicamos sus lados por un mismo número, es evidente que resultará otra terna, pero no primitiva, en la que los catetos se diferenciarán en el factor de multiplicación que hayamos usado.

Así que cualquier número entero puede ser diferencia entre catetos. Además, si es diferencia en una terna, puede serlo en infinitas. La causa es que si en la generación de terna mediante los valores (u2-v2, 2uv, u2+v2), también tendrán la misma diferencia si sustituimos u, v por 2u+v, u. En efecto, los lados serían:

Hipotenusa: (2u+v)2+u2=4u2+v2+4uv+u2=5u2+v2+4uv

Cateto 1: (2u+v)2-u2=4u2+v2+4uv-u2=3u2+v2+4uv

Cateto 2: 2*(2u+v)*u=4u2+2uv

Diferencia u2-v2-2uv

Es la misma diferencia que entre los dos catetos primitivos, u2-v2 y 2uv

Lo vemos con un ejemplo: Si u=2 y v=1, resulta la conocida 3, 4 y 5, con diferencia 1 entre catetos. Si aplicamos la transformación 2u+v, u, queda que u=2*2+1=5 v=2, Cateto 1: 52-22=21, 2*5*2=20, y mantienen la misma diferencia 1.

Reiterando el procedimiento obtendremos infinitas ternas con la misma diferencia (salvo signo u orden). Si la primera es primitiva, todas las demás lo serán, porque si u y v son primos entre sí, también lo serán 2u+v y u.

Ejemplo:

De los valores u=4, v=3, x=7, y=24, z=25, con diferencia entre catetos igual a 17, podemos engendrar u=11, v=4, x=88, y=105, z=137, con 105-88 = 17 y después u=26, v=11, x=572, y=555 z=797, y así tantas como queramos.

Valores de las diferencias

Si sólo admitimos ternas primitivas, no todos los números pueden ser diferencia de catetos. Los únicos posibles son 1, 7, 17, 23, 31, 41, 47, 49, 71, 73, 79, 89, 97, 103, 113, 119, ...

La razón es que las diferencias han de tener factores primos del tipo 8k+1 o bien 8k-1 (Ver http://oeis.org/A058529)


Otras relaciones entre hipotenusa y cateto

En las últimas cifras

Existen muchas hipotenusas que coinciden con catetos en las dos últimas cifras. Para que el estudio no tenga casos triviales, eliminamos los que terminan en dos ceros. Un ejemplo sería la terna (260, 288, 388), en la que dos lados terminan en 88. No es difícil encontrar hipotenusas de este tipo. Podemos probar esta función para Excel, en la que n es el número a estudiar y c el número de cifras en las que coincide con un cateto:

Function hip_mod_cat(n, c)

Dim i, m, p, r

Dim s$

s = "" ‘En esta cadena se volvará la terna pitagórica

m = 10 ^ c ‘Esta variable contendrá 10^c, 10, 100, 1000…

r = n Mod m ‘Encuentra las últimas cifras

If r = 0 Then hip_mod_cat = "NO":  Exit Function ‘Desechamos potencias de 10

For i = r To n - m Step m

'If n - i Mod m = 0 Then ‘Tienen cifras iguales

If escuad(n ^ 2 - i ^ 2) Then p = Sqr(n ^ 2 - i ^ 2): s = s + Str$(p) + ", " + Str$(i) + ", " + Str$(n) ‘Si es un cateto, creamos la terna en modo texto

'End If

Next i

If s = "" Then s = "NO"

hip_mod_cat = s

End Function

Con esta función se puede crear un bucle de búsqueda y obtenemos estas ternas:


Observamos que algunas hipotenusas presentan dos soluciones. Podíamos estudiar este caso, pero no merece la pena, para una simple curiosidad.

Como el proceso de búsqueda es rápido y aparecen pronto muchas soluciones, no abandonaremos la hoja de cálculo para buscar otros instrumentos.

El tercer cateto será siempre múltiplo de 10, ya que es la raíz cuadrada de una diferencia de cuadrados con las cifras últimas coincidentes.

Como curiosidad, estas son las soluciones para tres cifras, por si deseas reproducirlas. El comportamiento del otro cateto te dará una pista para entender el proceso.


Así que es condición necesaria que el tercer cateto termine en ceros.

 

Hipotenusa y cateto anagramáticos

Finalizamos esta exploración con un ejemplo más de relación entre hipotenusa y cateto. Con él y todo lo anterior como base, se pueden intentar otras búsquedas, que ya no entran aquí. Lo dejamos como propuesta.

Dos números son anagramáticos si poseen las mismas cifras y con la misma frecuencia. Para estudiarlos usaremos nuestra función digiordenado, que ordena las cifras de un número entero. La puedes consultar en esta entrada del blog:

https://hojaynumeros.blogspot.com/2017/05/sumas-anagramaticas.html

Con esta función es fácil saber si dos números son anagramáticos, pues entonces digiordenado dará el mismo resultado en ambos. Con esta idea, hemos construido una dunción similar a las anteriores. Es esta:

Function hip_anam_cat(n)

Dim i, p, r

Dim s$

s = ""

For i = 1 To n - 1

If digiordenado(n) = digiordenado(i) And escuad(n ^ 2 - i ^ 2) Then

p = Sqr(n ^ 2 - i ^ 2): s = s + Str$(p) + ", " + Str$(i) + ", " + Str$(n)

End If

Next i

If s = "" Then s = "NO"

hip_anam_cat = s

End Function

No necesita explicación. Con ella hemos encontrado estos ejemplos:



La tercera columna es la de hipotenusas, que son anagramáticas con el segundo cateto. Se observan soluciones dobles en 650 y 765.

El primer cateto siempre será múltiplo de 3, pues si los otros dos lados tienen las mismas cifras, la diferencia de sus cuadrados será múltiplo de 9 y, por tanto, su cuadrado lo será, luego el cateto será múltiplo de 3.

Como curiosidad, esta sería la versión para el lenguaje PARI:

is(n)={my(k=1,v=0);while(k<=n-1&&v==0,if(issquare(n*n-k*k)&&vecsort(digits(k))==vecsort(digits(n)),v=1);k+=1);v}

for(i=1,10000,if(is(i),print1(i,", ")))

Aquí, digiordenado se sustituye por vecsort(digits(k))

Devuelve las hipotenusas:

65, 153, 180, 218, 325, 327, 351, 436, 545, 615, 629, 650, 654, 702, 740, 763, 765, 807, 872, 925, 975, 981, 1325, 1453, 1480, 1530, 1625, 1635, 1640, 1800, 1865, 1872, 1940, 2132, 2180, 2601, 2725…

Con estos ejemplos ya podemos emprender otras búsquedas similares.

 

martes, 22 de noviembre de 2022

Regresos 6 – Oblongos y pitagóricos (1)

 Desde la publicación de nuestra entrada de título “Oblongos y pitagóricos” (https://hojaynumeros.blogspot.com/2010/03/oblongos-y-pitagoricos-3.html) hemos estudiado algunas relaciones entre catetos e hipotenusa dentro de una terna pitagórica. Parece conveniente repasar las mismas, eliminando lo accesorio, y efectuar una síntesis de varias entradas.

Catetos que se diferencian en una unidad

Comenzaremos con un repaso a la primera cuestión que publicamos:

Una cuestión que ha dado juego desde los tiempos de Girard y Fermat y que permite recorrer alternativas de cálculo es la siguiente:

De todos los triángulos rectángulos de lados enteros ¿Cuáles cumplen que la diferencia entre los catetos es la unidad?

Recordábamos que la primera terna en cumplir esta condición es la popular 3, 4 y 5. El resto resultará de la ecuación x2+(x+1)2=y2.

Otra forma de expresarlo es que el área del rectángulo formado por los dos catetos es un número oblongo, tipo N(N+1) y, por tanto, el área del triángulo será triangular (N(N+1)/2).

Podemos resolverla mediante búsqueda y con técnicas algebraicas.

Búsqueda

Como últimamente usamos funciones, organizaremos la búsqueda con la siguiente:

Function catetoscons$(n)

Dim a

Dim s$

s = ""

a = n^2 + (n+1)^2

If escuad(a) Then s = Str$(n) + Str$(n + 1) + Str$(Sqr(a))

catetoscons = s

End Function

 

Su funcionamiento se entiende bien: si n^2+(n+1)^2 es cuadrado, devuelve la terna completa. Las primeras conseguidas son:

Los valores de N están publicados en http://oeis.org/A001652. Volveremos a esta sucesión para revisar algunas propiedades.

Versión en PARI

Con este código avanzaremos más lejos en los valores de N:

is(n)={issquare(n^2+(n+1)^2)}

for(i=1,10^9,if(is(i),print1(i,", ")))

Obtenemos este resultado:

3, 20, 119, 696, 4059, 23660, 137903, 803760, 4684659, 27304196, 159140519,

Hemos llegado más lejos, pero con tantas cifras la búsqueda se hace muy lenta. Es preferible algún otro procedimiento más rápido, por lo que pasamos al Álgebra:

Estudio algebraico

La ecuación x2+(x+1)2=y2 se puede desarrollar de esta forma: x2+(x+1)2=y2;  2x2+2x+1=y2; (2x+1)2+1=2y2; (2x+1)2 - 2y2 = -1, por lo que llamando z=2x+1 desembocamos en una ecuación de Pell con segundo miembro igual a -1

Z2-2y2 = -1

Utilizamos la hoja de cálculo pell.ods o pell.xlsm contenidas en la dirección

http://www.hojamat.es/sindecimales/aritmetica/herramientas/herrarit.htm

con el resultado que indica la imagen siguiente


en la que valdrán las soluciones correspondientes a -1

Z=1;   Y=1;       Imposible, pues X sería negativo

Z=7;   Y=5         X=3; X+1=4; Y=5

Z=41; Y=29      X=20; X+1=21; Y=29

Z=239; Y=169   X=119; X+1=120; Y=169

Z=1393; Y=985 X=696; X+1=697; Y=985

Este método tiene el inconveniente de que depende de la precisión que tenga la hoja de cálculo en los números con coma flotante, lo que hará que se rompa en algún momento la periodicidad de los cocientes, en este caso el 2. Por ello se puede completar con una fórmula recursiva que obtenga soluciones exactas conociendo las primeras.

En este ejemplo cada elemento de las distintas celdas cumple la fórmula

an+2 = 2an+1 + an

pero como las soluciones aparecen de forma alternada, deberemos reiterar dos veces, y nos quedará:

an+4 = 2an+3 + an+2 = 2(2an+2 + an+1)+ 2an+1 + an = 4an+2 + 4an+1+ an = 6an+2 -  an

Con esta fórmula recursiva se van obteniendo las soluciones sin errores a partir de las dos primeras:

Z0 = 1; Z2 = 7; Z4 = 6*7-1 = 41; Z6 = 6*41-7 =239;…

Y0 = 1; Y2 = 5; Y4 = 6*5-1 = 29; Y6 = 6*29-5 =169;…

Pero no olvidemos que Z es una variable auxiliar Z=2X+1 y que después debemos despejar X

La siguiente lista de ternas, que coincide con la primera que propuso Girard, se ha obtenido mediante esta técnica. Los valores de N coinciden con los de la segunda columna.

1

0

1

5

3

4

29

20

21

169

119

120

985

696

697

5741

4059

4060

33461

23660

23661

195025

137903

137904

1136689

803760

803761

6625109

4684659

4684660

38613965

27304196

27304197

225058681

159140519

159140520

1311738121

927538920

927538921

7645370045

5406093003

5406093004

44560482149

31509019100

31509019101

259717522849

183648021599

183648021600

1513744654945

1070379110496

1070379110497

8822750406821

6238626641379

6238626641380

51422757785981

36361380737780

36361380737781

299713796309065

211929657785303

211929657785304

Los valores de N coinciden con los contenidos en http://oeis.org/A001652, que, por cierto, usa esta recurrencia como definición, que con el cambio de variable entre Z y X queda así:

a(n) = 6*a(n-1) - a(n-2) + 2 with a(0) = 0, a(1) = 3.

0, 3, 20, 119, 696, 4059, 23660, 137903, 803760, 4684659, 27304196, 159140519, 927538920, 5406093003, 31509019100, 183648021599, 1070379110496, 6238626641379, 36361380737780, 211929657785303,

Con hoja de cálculo ya no podemos seguir, por el problema de la coma flotante. Lo podemos intentar con PARI:

a=0;b=3;print1(a,", ");print1(b,", ");while(a<10^20,c=6*b-a+2;print1(c,", ");a=b;b=c)

Como llegamos a 10^20, en pocos segundos se avanza en la lista de valores de N:


Una curiosidad

Cuando no se tienen claras las fórmulas de recurrencia lineal, pero se dispone de suficientes términos iniciales. Se puede acudir a mi hoja de cálculo ecurrecurre, disponible en la dirección

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

En este caso usamos como datos los términos iniciales 0, 3, 20, 119, 696, y elegimos la variedad “No homogénea”, para que admita el sumando independiente 2. Pulsamos el botón de resolver y nos devuelve los coeficientes 6, -1 y 2.


Recurrencia doble

Fermat propuso una fórmula de recurrencia para generar ternas de este tipo a partir de otras similares. Dada la terna (x,x+1,y), se puede generar otra similar (x’,x’+1,y’) mediante las fórmulas x’=2x+3y+1  y y’=4x+3y+2.

Cuando se buscan las soluciones de la ecuación de Pell las recurrencias vienen dadas por las fórmulas de recurrencia zn+1=zn*z0+D*yn*y0  yn+1=zn*y0+yn*z0, pero en el caso z2-2y2 = -1 las soluciones surgen de forma alternada.

Así, como en este caso z0=1, y0=1, tendremos:

zn+1=zn+2yn; yn+1=zn+yn  y reiterando dos veces

Z’’=Z’+2Y’=(Z+2Y)+2(Z+Y) = Z+2Y+2Z+2Y = 3Z+4Y

Y’’=Z’+Y’ = Z+2Y+Z+Y = 2Z+3Y

Teniendo en cuenta que Z=2X+1, y que Y=X+1, nos resulta

Y’’=2Z+3Y=2(2X+1)+3Y = 4X+3Y+2, que es la segunda fórmula de Fermat

De Z’’=3Z+4Y podemos obtener (2X’’+1)=3(2X+1)+4Y;  2X’’ = 6X+4Y+2;

X’’ = 3X+2Y+1, que es la primera

Aplicamos estas dos fórmulas al cateto menor y a la hipotenusa y obtenemos los mismos resultados a partir de 3, 4 y 5

X''=3X+2Y+1        X+1   Y''=4X+3Y+2

3        4        5

20      21      29

119   120   169

696   697   985

4059 4060 5741

23660 23661 33461

137903 137904   195025

803760 803761   1136689

4684659 4684660 6625109

27304196  27304197  38613965

159140519 159140520 225058681

 Uso de la generación de ternas

 La terna 3, 4, 5 está engendrada por las fórmulas clásicas 2uv, u2-v2 y u2+v2 para u=2 y v=1. Si sustituimos u y v por u, v+2u se mantendrá la misma diferencia entre catetos.

Basta ver que si engendramos los nuevos catetos y los restamos (en orden contrario) resultará: 2u(v+2u) - (v+2u)2+u2= 2uv+4u2-v2-4u2-4uv+u2 = u2-v2-2uv, que es la diferencia original.

Esto nos permite engendrar de nuevo la lista que estamos considerando, tomando, n primer lugar u=2 v=1, y generando con ella la primera terna 3, 4 y 5. Después se aplica la fórmula de recurrencia  un = 2un-1+vn-1 vn = un-1 y se vuelve a generar una terna con ella, que resultará tener la misma diferencia pero con signo cambiado. Así hemos generado la lista con hoja de cálculo:


Con este cálculo abandonamos los algoritmos, y en la siguiente entrada pasaremos a propiedades curiosas de este tipo de ternas.