miércoles, 22 de enero de 2025

Regresos 13 - Diferencia de potencias

En este blog hemos tratado frecuentemente las diferencias de cuadrados y, recientemente, las de cubos. Parecía conveniente intentar una generalización a pares de potencias de cualquier exponente.

Para ello nos basaremos en la conocida fórmula

Para nuestro estudio es preferible expresar la diferencia de potencias como (a+h)k- ak

Observamos que se puede extraer factor común la diferencia h:


Expresión de un número N como diferencia de potencias

Si igualamos la anterior expresión a N, llegaremos a una conclusión interesante:

Si un número entero positivo N es expresable como diferencia de potencias, (a+h)k - ak, la diferencia h entre las bases ha de ser divisor de N

Esto nos da una base segura para las búsquedas, pero es que, además, con esa fórmula, tal como efectuamos para los cubos (ver mi entrada http://hojaynumeros.blogspot.com/2024/09/diferencias-de-cubos-enteros-positivos.html), obtenemos una cota para el valor de a:

Sería kak-1h menor que la diferencia de potencias, o lo que es igual, que N. Así que tendríamos:


Con esta cota y el carácter de divisor de h ya podemos intentar determinar si un número N es expresable o no como diferencia de potencias de exponente dado.

Ya se vio en la entrada enlazada que en el caso de los cubos la acotación era

Una idea sencilla es que si un número es diferencia de dos potencias de exponente k, si lo multiplicamos por otro número bk obtendremos otro número con la misma propiedad. De aquí deducimos que este tipo de números forma una sucesión infinita para cualquier valor de k, ya que el primero siempre existe.

 Función de búsqueda

Con esta base teórica podemos construir una sencilla función de búsqueda:

Function espotencia_igual(n, k)’Parámetros número y exponente
Dim a, h, tope
Dim s$

s = "" ’Contenedor de soluciones
For h = 1 To n / 2 ‘Posibles valores de h
If n / h = n \ h Then ‘Es divisor
tope = Int((n / k / h) ^ (1 / (k - 1))) ‘Tope calculado para h
For a = 1 To tope ‘Si es diferencia de potencias, se publica
If (a + h) ^ k - a ^ k = n Then s = s + "# " + Str$(a) + ", " + Str$(a + h)
Next a
End If
Next h
If s = "" Then s = "NO"
espotencia_igual = s
End Function

Por ejemplo, para k=4 obtenemos todos los números expresables como b4-a4 (y por tanto, también como m2-n2) y con divisor diferencia de cuadrados. Igualmente, por el Teorema de Fermat, no existirá entre ellos ninguna cuarta potencia:


Están publicados en https://oeis.org/A147857

En esta sucesión y en las que seguirán sólo podrán aparecer números primos si h=1, según las fórmulas de los primeros párrafos de esta entrada. En este caso de k=4 no aparecerán, porque b4-a4 es múltiplo de b2-a2, que no valdrá 1 para b>a. Ocurrirá lo mismo en todos los casos en los que el exponente sea número compuesto.

Según un comentario de OEIS, no figuran cuadrados en esta sucesión. Hemos visto alguna demostración similar y resulta larga y complicada.

Para k=5 obtenemos:

Al ser el exponente primo impar, sí pueden figurar primos en esta sucesión, para h=1. Los primeros son estos:

 

Tal como se comentó ya, el valor de h ha de ser 1, o bien a y b consecutivos.

Están publicados en https://oeis.org/A121616 , y ahí se sugiere el nombre de primos “pentan”, por analogía con los primos “cubanos”, ya estudiados en este blog.

También figuran cuadrados, como 7744=88^2=6^5-2^5.

Así podríamos seguir con otros valores de exponentes.

Versión en PARI

Sabemos que las hojas de cálculo no pueden manejar bien los números grandes. Para ello son mejores otras herramientas, como el lenguaje PARI. Hemos creado una rutina que devuelve las formas, si existen, de expresar un número como diferencia de potencias en varios casos de exponentes. En el ejemplo lo hemos aplicado al número 7744 y exponentes en un rango de 3 a 20, pero todo eso se puede cambiar.

n=7744;for(k=3,20,for(h=1,n/2,if(n%h==0,tope=(n/h/k)^(1/(k-1));for(a=1,tope,if((a+h)^k-a^k==n,print("# n=",n," k=",k," a=",a," b=",a+h))))))

Nos devuelve algo ya conocido:

 


 Nos indica que 7744 se expresa con exponente 5 como diferencia 65-25.

Si no nos importa dejar a nuestro equipo varios minutos calculando, podemos investigar todo un rango de números, con esta otra versión:

for(n=1000,2000,for(k=4,20,for(h=1,n/2,if(n%h==0,tope=(n/h/k)^(1/(k-1));for(a=1,tope,if((a+h)^k-a^k==n,print("# n=",n," k=",k," a=",a," b=",a+h)))))))

Aquí le hemos añadido al código un bucle entre 1000 y 2000, con este resultado:


Destaca el número 1023, y es fácil adivinar la razón.
 

 

No hay comentarios: