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
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.
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:
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:
Publicar un comentario