Antecedentes
En este blog se han estudiado
varios tipos de diferencias de potencias. Por ejemplo, ya hemos visto aquí las
diferencias de cuadrados, como puedes buscar en
https://hojaynumeros.blogspot.com/
También se han tratado las de
cubos:
https://hojaynumeros.blogspot.com/2024/09/diferencias-de-cubos-enteros-positivos.html
O bien de cubos menos cuadrados y
también el caso en el que los dos exponentes son iguales:
https://hojaynumeros.blogspot.com/2025/01/regresos-13-diferencia-de-potencias.html
Por último, algunas curiosidades
sobre diferencias de potencias, como, por ejemplo. Acercamientos entre
potencias
https://hojaynumeros.blogspot.com/2018/10/acercamiento-entre-potencias.html
En mi reciente publicación
“Números y potencias” están contenidas varias cuestiones interesantes
(descargable desde
https://www.hojamat.es/publicaciones/numpot.pdf)
Diferencias entre potencias de
distinto exponente
No he abordado nunca (creo que es
así, porque a mi edad la memoria falla), la diferencia entre dos potencias de
distinto exponente. Aprovecharé el tema para presentar varias alternativas.
Función ESPOTENCIA
Hay varias formas de identificar
una potencia perfecta. La más directa es la de descomponer el número en
factores primos y encontrar el MCD de sus exponentes. Si este es mayor que 1,
estaremos ante una potencia. Por ejemplo, 576=26*32. EL
MCD de 6 y 2 es 2, luego 576 es un cuadrado. Esta técnica nos da el mayor
exponente si el número es multipotencia, como el 64, que lo catalogará como
sexta potencia. Para la cuestión actual lo que nos interesa es que sea
verdaderamente una potencia.
Para sacar los factores primos
disponemos de nuestra función SACAPRIMOS, que la puedes encontrar en
https://hojaynumeros.blogspot.com/2022/06/numeros-con-cifras-crecientes-o_02105820646.html
Esta función te devuelve los
factores primos en el vector primo() y sus exponentes en expo(),
además de indicar el número de esos factores en NUMOMEGA.
Esas variables se han de declarar
de forma global en VBasic:
Global primo(50), expo(50)
Global numomega
Esta es la función ESPOTENCIA:
Public
Function espotencia(n)
Dim
i, j, s, p
If n
= 1 Or n = 0 Then espotencia = 1: Exit Function
p = n
j = sacaprimos(p) ‘Explicado en el párrafo
anterior
s = expo(1) ‘El vector expo está también
explicado
If j
> 1 Then
For
i = 2 To j
s =
mcd(s, expo(i))
‘Calcula el MCD
Next
i
End
If
If s
= 1 Then s = 0
‘Si MCD es 1, no es
potencia
espotencia = s ‘Devuelve el exponente o un
cero
End Function
Búsqueda de diferencias con la
función ESPOTENCIA
Haré uso de mi función ESPOTENCIA y de la correspondiente ISPOWER del lenguaje PARI. Esta última me permitirá llegar a números grandes con más facilidad.
La idea para buscar diferencias
de potencias que coincidan con N será la de recorrer todos los números K hasta
un tope prefijado, y estudiar si K y K+N son potencias. En caso afirmativo,
habremos dado con una solución. Se les halla la raíz exacta y se incorporan al
resultado.
La función quedaría así:
Function difepote$(n, tope)
Dim
b, m, p, q, r, t
Dim
s$
s = "" ‘Contenedor de soluciones
m = 0 ‘Contador de soluciones
For b = 1 To tope – n ‘El tope es parámetro
prefijado
q = espotencia(b) ‘Daría cero o un exponente
p = espotencia(b + n) ‘Daría cero o un
exponente
If p > 0 And q > 0 Then ‘Si no dan
cero, es que son potencias
r = raiz_exacta(b + n, p)
t = raiz_exacta(b, q)
m = m + 1 ‘Nueva solución
s = s + "=" + ajusta(r) + "^" +
ajusta(p) + "-" + ajusta(t) + "^" + ajusta(q)
End
If
Next
b
If s
= "" Then s = "NO" Else s = ajusta(m) + ": " + s
difepote = s
End Function
La función RAIZ_EXACTA también se basa en los vectores PRIMO y EXPO. Para quien tenga interés, adjunto su código sin comentarios:
Function raiz_exacta(n, k)
Dim p, r, i
If n =
1 Or n = 0 Then raiz_exacta = n: Exit Function
p =
espotencia(n)
If p
Mod k = 0 Then
r = 1
For i =
1 To numomega
r = r *
primo(i) ^ (expo(i) / k)
Next i
End If
If r =
1 Then r = 0
raiz_exacta = r
End Function
Un ejemplo del uso de esta función DIFEPOTE lo vemos con el número 28 y tope 200000:
Difepote(28;200000)=7:=2^5-2^2=6^2-2^3=2^6-6^2=2^7-10^2=2^9-22^2=37^3-15^4=2^17-362^2
Nos indica que ha encontrado
siete soluciones y escribe sus desarrollos.
No es un algoritmo rápido. En el
caso del 28 sí devuelve el resultado en pocos segundos, pero con un tope mayor
puede tardar.
Elijo ahora el número 120 para
destacar dos resultados que pueden resultar:
120=11^2-1^1=2^7-2^3=13^2-7^2=17^2-13^2=31^2-29^2
Una de las bases puede ser 1 (en
ese caso tendrá exponente 1) y las dos bases pueden ser iguales, como en
2^7-2^3. Es normal que esto ocurra.
Versión en PARI
Para lograr más rapidez y llegar
a números más grandes, he traducido la función DIFEPOTE al lenguaje PARI. No
necesita explicación, salvo que en él es preferible presentar los resultados
como lista y no como cadena de texto.
Una novedad en este lenguaje es
que ISPOWER, además de devolver el exponente, guarda la base en una variable.
Así, ispower(343,,&k) devolverá 3, porque es un cubo, y guardará la base 7
en la variable k. Tiene el inconveniente de que no maneja bien al caso del 1,
pues lo considera siempre potencia de exponente cero. Esto se puede ignorar o
intentar corregirlo en el código. He elegido esta última posibilidad, aunque el
código se alarga demasiado. Es este:
difepote(n,tope)={my(b,b1,s=List(),r1,r2);p=ispower(n+1,,&r1);if(p>0,listput(~s,r1);listput(~s,p);listput(~s,1);listput(~s,1);listput(~s,"#"));for(b=2,tope-n,q=ispower(b,,&r2);b1=b+n;p=ispower(b1,,&r1);if(p<>0&&q<>0,listput(~s,r1);listput(~s,p);listput(~s,r2);listput(~s,q);listput(~s,"#")));s}
print(difepote(132608,2000000))
Aquí se trocea en líneas, pero
hay que escribirlo sin saltos de línea. Este es el resultado en la web de PARI:
He elegido este ejemplo porque en él se destaca la mayor potencia de cálculo de PARI, ya que Excel tardaría más. Una solución más restringida, con un tope menor, es
4:
=372^2-76^2=52^3-20^3=387^2-131^2=408^2-184^2
Si llegamos a un tope de 2000000,
tarda sus buenos minutos en Excel, y al final devuelve:
10:=372^2-76^2=52^3-20^3=387^2-131^2=408^2-184^2=522^2-374^2=582^2-454^2=648^2-536^2=933^2-859^2=1068^2-1004^2=1212^2-34^4
El mismo resultado, pero con más
lentitud.
Es una preferencia personal el
pasar o no a PARI en esta cuestión.
Seguiré con el tema en la siguiente entrada.

No hay comentarios:
Publicar un comentario