viernes, 17 de diciembre de 2021

Frontera entre dos sumas equivalentes (2)

En la entrada anterior buscábamos números que separaran sumas equivalentes de cuadrados consecutivos. Ideamos tres algoritmos y comprobamos su equivalencia. En esta segunda entrada aplicaremos las ideas a otros tipos de números.

Sumas de triangulares

El número 17 cumple la propiedad que estamos estudiando si la aplicamos a números triangulares. En efecto, estas dos sumas de triangulares consecutivos son equivalentes, y sus órdenes están separados por el número 17:

T(14)+T(15)+T(16)=14*15/2+15*16/2+16*17/2=361

T(18)+T(19) =18*19/2+19*20/2=361

Podemos intentar buscar qué otros números naturales cumplen esta misma propiedad. En el primer y tercer algoritmo presentados en la entrada anterior, bastará sustituir las expresiones tipo j^2 por las de los triangulares j*(j+1)/2. Los dos algoritmos 1 y 3 coinciden en las soluciones:

 


Con la función SUMAFUN de uso propio podemos comprobar las soluciones para 122, que son 29 y 153:

sumafun(29;121;"X*(X+1)/2")=298561

sumafun(123;153;"X*(X+1)/2")=298561

Estos resultados coinciden con los correspondientes a la suma de oblongos, porque son sus dobles.


Sumas de números primos

En el caso de los números primos, es preferible exigir que el número frontera sea primo, pues, en caso contrario, aparecerían varios números consecutivos para una misma suma. Es cuestión de economía de resultados.

Adaptando convenientemente las funciones tipo “frontera” de hoja de cálculo llegaríamos a este listado:

Primo Valores de a y b

23      11 31

47      17 67

101   67 127

193   53 271

197   37 281

211   163 251

251   131 337

269   163 349

307   11 439

379   139 521

389   83 563

449   29 647

509   283 661

571   199 787

653   569 743

733   397 971

739   229 1033

743   643 829

769   131 1097

859   241 1217

883   11 1289    

Por ejemplo, el número 101 es primo y separa dos sumas iguales de consecutivos, que llegan hasta 67 por la parte inferior y a 127 por la superior. Lo hemos comprobado con esta tabla de Excel:

Suma de cubos

Sólo hemos encontrado (sin buscar demasiado, porque el proceso es lento) el ejemplo de 29, en el que la suma de cubos desde 4 hasta 28 coincide con la de los comprendidos entre 30 y 34. Lo puedes comprobar en esta tabla:


 

Con otros tipos de números

Si los sumandos los tomamos del tipo n2+1, sí existen soluciones:

Comprobamos, por ejemplo, el primero: las sumas desde 168 hasta 472 y desde 474 hasta 591, formadas por sumandos del tipo n2+1, han de ser iguales. Lo comprobamos con nuestra función SUMAFUN:

SUMAFUN(168;472;"X^2+1")=33596665

SUMAFUN(474;591;"X^2+1")=33596665

 

Sumas de valores de polinomios

Con estas técnicas podríamos extender el estudio a, por ejemplo, cualquier polinomio. En esta tabla están las fronteras para n2-1:

N       Valores de a y b

115   65 140

290   71 364

315   174 385

4651 4131 5075

 

Números poligonales y piramidales

Como los números poligonales y piramidales son polinomios, valdría para ellos todo lo explicado anteriormente. Por ejemplo, los hexagonales siguen el polinomio H(n)=n(2n-1), por lo que se puede intentar buscar fronteras para ellos y sus sumas equivalentes.

Lo hemos intentado con las técnicas de frontera2, obteniendo estas soluciones:

N                 Valores de a y b

37               8 46

154             85 188

239             54 300

399             134 499

1288           574 1598

1779           469 2234

2099           59 2644

Comprobamos el último:

SUMAFUN(59;2098;"X*(2*X-1)")=6158445500

SUMAFUN(2100;2644;"X*(2*X-1)")=6158445500

 

Sumas de tetraedros

Y para finalizar, 44 es frontera para números tetraédricos, o piramidales triangulares, pues

SUMAFUN(10;43;"X*(X+1)*(X+2)/6")=162690

SUMAFUN(45;52;"X*(X+1)*(X+2)/6")=162690

La fórmula de los tetraedros la tienes en

https://es.wikipedia.org/wiki/N%C3%BAmero_tetra%C3%A9drico

También puedes consultar nuestra publicación

http://www.hojamat.es/publicaciones/piramidal.pdf


jueves, 9 de diciembre de 2021

Frontera entre dos sumas equivalentes (1)

Descubrí en http://oeis.org/A094552 que 18921 separa dos sumas de cuadrados con idéntico total, una hasta él y otra a partir de él, sin incluirlo (también podría contarse con él). Después de investigarlo, llegué a esta  comprobación:

suma(i=10472,18920,i^2)=1875012353984

suma(i=18922,23145,i^2)=1875012353984

Aquí, más que la sucesión resultante con los números que cumplen esta condición, que ya está publicada en la dirección referida, nos interesarán los algoritmos que se puedan usar en este caso y en otros afines. Los primeros números publicados son:

52, 100, 137, 513, 565, 1247, 8195, 13041, 18921, 35344, 40223, 65918, 68906, 121759, 132720, 213831, 215221, 235469, 265654, 506049, 520654, 585046, 598337, 817454, 993142, 1339560, 1579353, 2331619, 2843086, 3594812…

Nuestro objetivo será, además, encontrar las dos sumas con igual total a las que el número separa. Para ello habrá que identificar previamente (y ese será el objetivo prioritario) los límites de esas dos sumas a partir de su inicio en n-1 y n+1 respectivamente. El problema será la lentitud del proceso, pues requiere dos bucles anidados para crear las sumas, y eso, en números de más de tres cifras, puede ser resultar poco eficiente en equipos pequeños. Por ello, plantearemos tres algoritmos, el primero el “ingenuo”, el que inicialmente nos viene a la mente, el segundo con el uso de técnicas algebraicas, y el tercero con acumulación progresiva de cada suma.

Primer algoritmo (ingenuo)

Hemos creado la función frontera0, para que, dado un número cualquiera, determine si cumple la propiedad o no y cuáles son los extremos de las dos sumas con igual total. Devolverá un “NO” o bien esos extremos.

La idea es ir sumando cuadrados a la derecha del número N. Terminaremos la búsqueda al llegar a 2N, porque la otra suma sólo podrá tener N sumandos (si no, invadiría el cero y los negativos) y la suma superior tendrá menos sumandos que la inferior (porque estos son mayores).

Una vez determinada una suma provisional, recorreremos el rango 1…N-1 en orden inverso (lo esperable es que no llegue al 1) y para cada suma inferior compararemos con la superior para ver si son iguales, en cuyo caso sí hay solución. Si no, seguimos añadiendo sumandos a ambas.

Listado de la función para Excel y Calc

Function frontera0(n)

Dim j, k, s, t, s1, p, q

Dim b$

 

t = 0 ‘Indicador de que hay solución. En principio t=0 porque no la hay.

s = 0 ‘Suma superior

j = n + 1 ‘Comienza en N+1

While t = 0 And j < 2 * n ‘No llega a 2N

s = s + j ^ 2 ‘Se suman los cuadrados

k = 1 ‘Se inicia la búsqueda de la suma inferior

s1 = 0 ‘Contiene la suma inferior

While t = 0 And k < n

s1 = s1 + (n - k) ^ 2 ‘Acumula la suma inferior en orden inverso

If s1 = s Then ‘Si ambas sumas son iguales, hay solución

t = 1 ‘Indicador de solución

p = n - k: q = j ‘Se recogen las soluciones

End If

k = k + 1

Wend

j = j + 1

Wend

If t = 0 Then frontera0 = "NO" Else frontera0 = Str$(p) + Str$(q) ‘Devuelve “NO” o la solución

End Function

Si planteamos una búsqueda sistemática con esta función, obtenemos las primeras soluciones, que coinciden con las publicadas en OEIS, pero con el añadido de los límites de las sumas:

N       Límites

52      7 65

100   55 122

137   22 172

513   169 642

565   330 687

1247 572 1545

Para probar que los límites son correctos se puede usar cualquier calculadora avanzada. Hemos usado Wiris, que es gratuita y muy clara en su aspecto. La probamos con la solución correspondiente al 137. Calculamos la suma de cuadrados desde 22 hasta 136 y, por otra parte, desde 138 hasta 172. Nótese que la suma superior tendrá siempre menos sumandos que la inferior.


De esta forma hemos comprobado que 137 es un término de la sucesión buscada.


Segundo algoritmo, con ayuda del Álgebra

Nos basamos en la fórmula de los primeros cuadrados desde 1 hasta n:

Si se conoce la suma de cuadrados s0 desde 1 hasta n-1 (de fórmula (n-1)*n*(2n-1)/6) y el valor de la suma superior s, restando s0-s equivaldrá a un k(k+1)(2*k+1)/6 para cierto valor de k. La ventaja es que ese valor se puede encontrar. Veamos cómo.

Si llamamos M a la diferencia s0-s, tendremos:

Esto nos da una cota superior para el valor de k

De igual forma:

Es sencillo comprenderlo al comparar las dos fracciones. Seguimos:

Por tanto, para cada suma superior podemos calcular la k correspondiente en la suma inferior (esa k se corresponde con la suma desde 1 hasta el tope inferior), quedándonos con la parte entera de esa raíz.

Este razonamiento evita el doble bucle, porque, para cada suma superior obtendremos el límite correspondiente en la inferior. El algoritmo quedaría según el listado de la segunda función de Excel, frontera1:

Function frontera1$(n)

Dim j, k, s, t, s1, s0, m, p, q

t = 0 ‘Indicador de solución

s = 0 ‘Suma superior

j = n + 1 ’Primer sumando

s0 = n * (n - 1) * (2 * n - 1) / 6 ‘Suma en n-1

While t = 0 And s < s0

s = s + j ^ 2

m = s0 – s ‘Diferencia entre sumas, para calcular k

k = Int((3 * m) ^ (1 / 3) + 0.000001) ‘Redondeamos por defecto

s1 = s0 - k * (k + 1) * (2 * k + 1) / 6 ‘Suma inferior calculada

If s1 = s Then t = 1: p = k + 1: q = j ‘Hay solución

j = j + 1

Wend

If t = 0 Then frontera1 = "NO" Else frontera1 = Str$(p) + Str$(q)

End Function

 

Tercer algoritmo (paso a paso se marcha mejor)

En el tercer intento comenzaremos con los valores s=(n+1)^2 y s1=(n-1)^2. Es evidente que s1<s, por lo que podemos ir añadiéndole sumandos hacia atrás a s1 hasta que sobrepase a s, Si llegado a este punto las sumas son iguales, hemos terminado y, si no, aumentamos alternativamente s y s1 hasta que se igualen o s1 llegue hasta el tope 0, con lo que no existirá solución.

Esta sería la función para el algoritmo tercero:

Function frontera2$(n)

Dim j, k, t, s1, s0, m, p, q

 

t = 0 ‘Indicador de solución

k = n – 1 ‘Índices de las sumas

j = n + 1

s0 = k ^ 2 ‘Inicios de las sumas

s1 = j ^ 2

While t = 0 And k > 0 ‘Bucle de seguridad por si no hay solución

While s0 < s1 And k > 0 And t = 0

k = k - 1

s0 = s0 + k ^ 2 ‘Se incrementa s0 si es menor que s1

Wend

 

While s0 > s1 And t = 0

j = j + 1

s1 = s1 + j ^ 22 ‘Se incrementa s1 si es menor que s0

Wend

If s1 = s0 Then t = 1: p = k: q = j ‘Si se igualan, hay solución

Wend

If t = 0 Then frontera2 = "NO" Else frontera2 = Str$(p) + Str$(q)

End Function

 

Este será quizás el algoritmo más rápido (no lo he cronometrado, pero se le ve con más velocidad). Es reconfortante comparar las tres posibilidades y comprobar la unicidad de resultados:

Como se afirmó en los primeros párrafos, el interés de este estudio residía en los algoritmos, y no en los resultados. En la siguiente entrada aplicaremos estas ideas a otros tipos de números.

miércoles, 1 de diciembre de 2021

Regresos 2: La mitad, cuadrado, el tercio, cubo

En los primeros tiempos de este blog se lanzaban retos a los lectores, pero luego se cambió el estilo. Entre ellos figuraba este:

Encuentra los primeros números naturales N que admiten estas dos descomposiciones:

N = 2n2 = 3m3

(https://hojaynumeros.blogspot.com/2009/05/la-mitad-cuadrado-el-tercio-cubo.html)

 Búsqueda por razonamiento

La idea propuesta era jugar con los factores primos de cada miembro de la igualdad. Así, en m3 debe figurar el factor 2, y en n2 el factor 3:

Los introducimos y nos quedarán dos potencias p2 y q3:

2*3*3*p2=3*2*2*2*q3 o bien 18p2=24*q3

En el primer miembro falta el 2 respecto al segundo, que lo extraemos de p2, y en el segundo falta un 3, extraíble de q3:

2*3*3*2*2*r2=3*2*2*2*3*3*3*s3, es decir,  72*r2=648*s3

Como 648/72=9, lo extraemos de r2:

72*3*3*u2=648*v3

Podemos hacer u=v=1 y resulta la primera solución: N=648

Así que 648 = 2*182 = 3*63

Si  multiplicamos 648 por m6 , siendo m cualquier número natural, resultarán las demás, ya que m6 contendrá un cuadrado por un lado y un cubo por otro:

Esas soluciones están publicadas en http://oeis.org/A185270

0, 648, 41472, 472392, 2654208, 10125000, 30233088, 76236552, 169869312, 344373768, 648000000, 1147971528, 1934917632, 3127772232, 4879139328, 7381125000, 10871635968, 15641144712, 22039921152, 30485730888, 41472000000, 55576446408, 73470177792, 95927256072 (En OEIS siempre se inicia en 0 si es posible)

Ya que conocemos el procedimiento, crearemos una tabla de Excel:


En ella figuran las primeras sextas potencias, su producto por 648 y los valores para n y m en el enunciado del problema. Evidentemente, coinciden con los elementos publicados en OEIS.

De los razonamientos anteriores se desprende que el número mínimo (en este caso 648) ha de poseer solo los factores primos 2 y 3, y si después se multiplica por potencias sextas, aparecerán otros factores.

En la igualdad N = 2n2 = 3m3 podemos llamar u al exponente del 2 en n y v al que tiene en m. Se cumplirá:

1+2u=3v, es decir, que u=(3v-1)/2

Esto obliga a que v sea impar, y dando valores:

Si v=1, u=1, N presentará un exponente igual a 3, que es el que tiene la solución 648.

Con el factor 3 podemos razonar igual, si r es su exponente en n y s el de m, se cumplirá: 2r=1+3s y r=(1+3s)/2, con lo que s también será impar.

Si s=1, r=2, y N tendrá de exponente 2r=4 (o 1+3s=4), que también coincide con el exponente de 648.

Ese tipo de razonamiento sería válido para otras propuestas.

 

Búsquedas con una función

En la entrada de hace años se proponía que N= 2n2 = 5m5

La primera solución era el número  500000=2*5002=5*105

Después habría que multiplicar por potencias décimas.

¿Y en el caso de N= 3n3 = 5m5 y otros similares?

Podemos caracterizar los números buscados mediante una función de hoja de cálculo. Está diseñada para tratar el caso general: N=p*np=q*mq.

Public Function expocoef(n, p, q) As Boolean

‘Los parámetros son N y los dos exponentes p y q

Dim k, j

k = Int((n / p) ^ (1 / p) + 0.00000001) ‘Posible valor de n

j = Int((n / q) ^ (1 / q) + 0.00000001) ‘Posible valor de m

If p * k ^ p = n And q * j ^ q = n Then expocoef = True Else expocoef = False

End Function

Lo aplicamos al caso p=2 y q=3, los propuestos en un principio, buscamos los números que lo cumplen y queda:

No seguimos la búsqueda porque ya conocemos la teoría. Sólo se trataba de confirmarla.

En el caso de p=2 y q=5 podemos traducir la función a PARI, que es más rápido:

expocoef(n,p,q)={my(k,j);k=round((n/p)^(1/p));j=round((n/q)^(1/q));p*k^p==n&&q*j^q==n}

for(i=1,100000,if(expocoef(i,2,3),print(i)))

Es más sintético porque devuelve el valor p*k^p==n&&q*j^q==n, que da forma a la condición propuesta. Para p=2 y q=3 da rápidamente las dos primeras soluciones 648 y 41472:


Para p=2 y q=5 devuelve:


Ya conocíamos el valor 500000 como primera solución.

Otro ejemplo: para p=2 y q=7 la solución es:

N=737894528=2*19208^2=7*14^7

Aquí copiamos las primeras soluciones en los casos más simples:


 

Versión rápida de la búsqueda

Si solo estudiamos las primeras soluciones, sin factores extraños a los dados en la cuestión, podemos usar un código similar a este:

expocoef(n,p,q)={my(k,j);k=round((n/p)^(1/p));j=round((n/q)^(1/q));p*k^p==n&&q*j^q==n}

for(i=1,10,for(j=1,10,m=3^i*5^j;if(expocoef(m,3,5)>0,print(m))))

Está adaptado al caso de N= 3n3 = 5m5

Al usar solo potencias, es muy rápido, y nos da en segundos la primera solución:


Así podríamos proceder en otros casos.