En esta entrada nos preguntaremos, dado un número natural N, qué progresiones aritméticas de números, también naturales, tienen como suma el número dado N.
Esta cuestión maneja tres
variables distintas, como son el término inicial de la progresión, a1, el número de términos k, y la diferencia de la progresión,
sea d. Para una gestión cómoda del
problema, es conveniente fijar una de ellas y dejar como variables las otras
dos. Su relación algebraica es sencilla, si se recuerdan las fórmulas de las
progresiones aritméticas:
Término general:
Suma de la progresión
Si combinamos las dos
fórmulas, y llamamos N a la suma (que es
nuestro objetivo), obtendremos, después de simplificar:
Multiplicando por 2:
Esta es nuestra igualdad básica, que nos informa de algo fundamental, y es que el número de términos k ha de ser divisor de 2N.
Por otra parte, el máximo
valor de k sería el resultante de sumar una progresión aritmética formada por
los primeros números naturales (d=1). Cualquier otra progresión requiere menos
sumandos. Esa suma de los primeros naturales constituye un número triangular,
luego la cota de k se desprendería de la desigualdad
En otras entradas de este blog hemos despejado el equivalente a k respecto a N, y nos ha resultado, después de manipulaciones algebraicas:
En lenguaje de VBASIC y similares, k<=Int((Sqr(8 * n + 1) - 1) / 2)
Además de ser divisor de 2N
y presentar esta acotación, al despejar a1
o d en la fórmula básica, deberá
resultar un entero positivo. Según planteemos la búsqueda, exigiremos que uno u
otro sean de ese tipo.
Por otra parte, si llamamos q al cociente (que será entero) 2N/k, es fácil ver que la diferencia d tiene como cota q/(k-1) (que sería cuando a1=0).
Por ejemplo, la siguiente
función depende de N y k, y en ella exigimos que a1 sea entero positivo:
Function sumaprogre$(n, k) ‘Es
un texto, para abarcar todas las soluciones
Dim a, d, b, c, q
Dim s$
s$ = "" ‘Contenedor
para el texto
q = 2 * n / k ‘Cociente
para ver si k es divisor de 2N
If q = Int(q) Then ‘Es
divisor
For d = 2 To q / (k - 1) ‘Usa
la cota q/(k-1) para d
a = (q - d * (k - 1)) / 2 ‘Cálculo
de a1
If a > 0 And a = Int(a)
Then ‘Si a1 es entero positivo, seguimos
b = a + d * (k - 1) ‘Último término
s = s + " ##
a(1)=" + Str$(a) + " a(k)=" + Str$(b) + " d=" +
Str$(d)
‘Se presenta el
resultado como texto, con inicio, fin y diferencia
End If
Next d
End If
If s = "" Then s =
"NO" ‘No hay solución
sumaprogre = s
End Function
Por ejemplo, el número 142 es igual a 2*71, con lo que los divisores de 284 (2N) son 284, 142, 71, 4, 2, 1, y constituyen los valores posibles de k. Si probamos k=71, la función nos devuelve un “NO”, porque no existen sumas con k=71. Por el contrario, si elegimos k=4, nos resulta un número excesivo de soluciones:
Sumaprogre(142;4)= ## a(1)= 31 a(k)= 40 d= 3 ## a(1)= 28 a(k)= 43 d= 5 ## a(1)= 25 a(k)= 46 d= 7 ## a(1)= 22 a(k)= 49 d= 9 ## a(1)= 19 a(k)= 52 d= 11 ## a(1)= 16 a(k)= 55 d= 13 ## a(1)= 13 a(k)= 58 d= 15 ## a(1)= 10 a(k)= 61 d= 17 ## a(1)= 7 a(k)= 64 d= 19 ## a(1)= 4 a(k)= 67 d= 21 ## a(1)= 1 a(k)= 70 d= 23
Observamos que varían entre d=3: 31+34+37+40=142 hasta d=23, 1+24+47+70=142.
Los valores posibles de las diferencias cumplen la acotación 2N/k/(k-1), que en este caso sería 284/4/3=23,666…
Llama la atención que probando varios números, suelen aparecer muchas soluciones, o ninguna. En algunos casos, la solución es única. Por ejemplo, el número 2024 sólo admite una solución con 44 sumandos:
Sumaprogre(2024;44)= ##
a(1)= 3 a(k)= 89 d= 2
Es una suma de impares desde 3 hasta 89. Con otra herramienta, usando diferencias de cuadrados, se llega al mismo resultado:
Aquí se ha expresado 2024 como 452-12, de donde resulta la misma suma de impares.
Estudio para un número dado
La anterior función
se puede aplicar a todos los divisores de un número, con lo que obtendríamos un
panorama general de todas las posibilidades que tiene de ser suma de una
progresión aritmética. El problema es de visualización, pues, tal como
comentamos anteriormente, pueden obtenerse muchas soluciones, con lo que se
perdería la visión de conjunto. En el siguiente recorte (incompleto) podemos
observar los resultados para 2024:
La primera columna indica el
número de sumandos, y la segunda, en forma de texto, todas las posibilidades,
descritas mediante a(1), a(k) y d.
Uso
de la diferencia como parámetro
Podemos estar interesados en
cuántas sumas, con una diferencia dada, se pueden encontrar para N. Por
ejemplo, en el recorte anterior del caso del 2024, se descubren varios ejemplos
con d=4.
La siguiente función, muy
similar a la anterior, nos devuelve todas las sumas con una diferencia dada. No
se añaden comentarios porque la metodología es la misma.
Function sumaprogre2$(n, d)
Dim a, k, b, c, q, l
Dim s$
s$ = ""
l = Int((Sqr(8 * n + 1) - 1)
/ 2)
For k = 2 To l
q = 2 * n / k
If q = Int(q) Then
a = (q - d * (k - 1)) / 2
b = a + d * (k - 1)
If a > 0 And a = Int(a)
Then s = s + " ## a(1)=" + Str$(a) + " a(k)=" + Str$(b) +
" k=" + Str$(k)
End If
Next k
If s = "" Then s =
"NO"
sumaprogre2 = s
End Function
Aplicada al año 2024 y a la diferencia d=4 nos ha devuelto estas soluciones, que coinciden con las del esquema general:
## a(1)= 1010 a(k)= 1014 k= 2 ## a(1)= 500 a(k)= 512 k= 4 ## a(1)= 239 a(k)= 267 k= 8 ## a(1)= 164 a(k)= 204 k= 11 ## a(1)= 50 a(k)= 134 k= 22 ## a(1)= 44 a(k)= 132 k= 23
En ellas se nos ofrecen el primer término a(1), el último a(k) y el número de sumandos k.
Por ejemplo, a(1)= 164 a(k)= 204 k= 11 se refiere a esta suma con 11 sumandos que se diferencian en 4 unidades:
2024=164+168+172+176+180+184+188+192+196+200+204
Podríamos repetir las búsquedas fijando un valor para a1, pero no parece resultar interesante.
No hay comentarios:
Publicar un comentario