En la entrada anterior se discutió la posibilidad de que un número fuera hipotenusa de varias ternas pitagóricas. Continuará aquí el tema calculando de cuantas ternas puede ser cateto un número dado N.
Se tratará de buscar soluciones a la ecuación
N2=a2-b2
Estamos suponiendo implícitamente que a es mayor que
b, luego podemos descomponer la diferencia de cuadrados de esta forma,
llamando a=b+k
N2=(a+b)(a-b)=(b+k+b)(b+k-b)=k(2b+k)
Esto nos lleva a que la diferencia k entre a y b ha de ser
divisor de N2, al igual que 2b+k. Es claro que
N2=k(2b+k)>k2, luego k<N
Estas consideraciones nos llevan a un protocolo para
encontrar ternas con un cateto dado N.
Recorremos todos los divisores de N, sean K.
Para cada K estudiamos N2/K-K, que ha de ser un
número par positivo. Su mitad será el número b, el otro cateto. La hipotenusa
se calculará como b+K.
Este procedimiento lo plasma la siguiente función para
VBasic:
Function escateto$(n)
Dim s$
Dim k,
b, m, a, nn
s =
"" ‘Contenedor de soluciones
m = 0 ‘Número
de soluciones
nn = n
* n’ Cuadrado de n
For k
= 1 To n
If nn
/ k = nn \ k Then ‘Es un divisor del cuadrado
b =
(nn / k - k) / 2 ‘Posible valor del otro cateto
If b > 0 And b = Int(b + 0.000001) Then ‘Solución válida
m = m
+ 1’Aumenta el contador
a = b
+ k ‘Hipotenusa
s = s
+ "+" + ajusta(a) + "^2-" + ajusta(b) + "^2" +
" " ‘Se incorpora la solución
End If
End If
Next k
s =
ajusta(m) + ":: " + s ‘Toma nota del número de
soluciones
escateto
= s
End
Function
Esta
función es razonablemente rápida, y eso que pueden aparecer más de 20
soluciones frecuentemente.
Un ejemplo: ¿De cuántas ternas pitagóricas es cateto el número
812?
Resultan trece ternas con cateto 812:
Se puede comprobar alguna, y la diferencia de cuadrados
deberá ser 659344, el cuadrado de 812.
Es evidente que el posible cateto deberá ser un número tal
que su cuadrado sea compuesto y que sea producto de un par de divisores de la
misma paridad, como veremos más adelante. Esta condición la cumplen todos los
números enteros positivos. Por esa razón todos pueden ser catetos.
En esta captura de pantalla de un rango elegido al azar se
observa que todos los números naturales pueden ser catetos, pero que los
números primos sólo lo son una vez:
Llaman la atención las 40 soluciones de 2208.
Otro procedimiento
El protocolo elegido es el más
rápido, pero se puede usar un argumento sencillo y popular para encontrar las
soluciones.
La idea es muy simple:
Si N2=a2-b2=(a+b)(a-b),
los paréntesis han de ser de la misma paridad, llamémosles m y n
respectivamente, ya que a=(m+n)/2 y b=(m-n)/2, y ambos han de ser enteros.
Entonces la búsqueda de soluciones se reduce a encontrar productos de dos
factores, ambos pares o ambos impares, con resultado N2.
Esta idea daría lugar a otra función parecida a la
anterior:
Function escateto2$(n)
Dim s$
Dim k, b, m, a, nn, kk
s = ""
m = 0
nn = n * n
For k = 1 To nn
If nn / k = nn \ k Then
kk =
nn / k
If k
> kk And (k - kk) Mod 2 = 0 Then ‘Aquí se exige misma paridad
a = (k + kk) / 2: b = (k - kk) / 2
m = m + 1
s = s
+ "+" + ajusta(a) + "^2-" + ajusta(b) + "^2" +
" "
End If
End If
Next k
s = ajusta(m) + ":: " + s
escateto2 = s
End
Function
Probamos la función con el anterior ejemplo, 812:
13:: +1015^2-609^2 +1037^2-645^2 +1537^2-1305^2
+1780^2-1584^2 +2900^2-2784^2 +3413^2-3315^2 +5713^2-5655^2 +5915^2-5859^2
+11788^2-11760^2 +23555^2-23541^2 +41213^2-41205^2 +82420^2-82416^2
+164837^2-164835^2
Obtenemos los mismos trece resultados.
Casos particulares
Primos impares
Los números primos impares presentarán siempre un
resultado, pues, si llamamos p al primo, su cuadrado p2 tendrá tres
divisores, 1, p y p2, con lo que el único par a, b con a>b y de
la misma paridad será 1 y p2. Las soluciones serán, pues, a=(p2+1)/2
y b=(p2-1)/2. En la siguiente imagen se observa esto en un pequeño
rango de primos:
Semiprimos impares no cuadrados
Los números de este tipo son producto de dos primos impares
distintos, p1 y p2. Sus divisores serán 1, p1, p2 y p1p2.
Los divisores de su cuadrado serán 1, p1, p2, p1p2,
p12, p22, p1p22,
p2p12, p12p22,
nueve divisores, que dan lugar a cuatro pares de productos con factores
distintos de igual paridad. Por ejemplo, 15 y 35 se descomponen así:
15 4::
+113^2-112^2 +39^2-36^2 +25^2-20^2 +17^2-8^2
35 4::
+613^2-612^2 +125^2-120^2 +91^2-84^2 +37^2-12^2
Dejo como ejercicio sencillo razonar que los semiprimos no
cuadrados pares presentan una descomposición:
14 1:: +50^2-48^2
26 1::
+170^2-168^2
Los semiprimos cuadrados se descomponen de una forma el 4 y
de dos los impares.
4 1:: +5^2-3^2
49 2::
+1201^2-1200^2 +175^2-168^2
169 2::
+14281^2-14280^2 +1105^2-1092^2
Las potencias de un primo tienen tantas descomposiciones
como indique su exponente:
3 1:: +5^2-4^2
9 2:: +41^2-40^2
+15^2-12^2
27 3::
+365^2-364^2 +123^2-120^2 +45^2-36^2
81 4::
+3281^2-3280^2 +1095^2-1092^2 +369^2-360^2 +135^2-108^2
243 5::
+29525^2-29524^2 +9843^2-9840^2 +3285^2-3276^2 +1107^2-1080^2 +405^2-324^2
Hay que recordar que se debe razonar sobre el cuadrado del
número propuesto.
Esta función de número de descomposiciones no es
multiplicativa, por lo que no es útil descomponer N en factores y contar uno
por uno para luego multiplicar.
Un ejemplo:
4 1:: +5^2-3^2
9 2:: +41^2-40^2
+15^2-12^2
36 7::
+325^2-323^2 +164^2-160^2 +111^2-105^2 +85^2-77^2 +60^2-48^2 +45^2-27^2
+39^2-15^2
Dejo aquí los casos particulares
Fórmula general
Lo que sigue es una adaptación
de mi estudio contenido en https://hojaynumeros.blogspot.com/2017/01/numero-de-descomposiciones-en.html
En él se explican todos los
casos de descomposición en diferencia de cuadrados, pero al no ser hipotenusa y
cateto, se admite el caso en el que b=0. Bastará restar una unidad a la fórmula
general para cuadrados, o, preferiblemente, corregir la función que se propone,
restando 1 al final. Se copia a continuación:
Public Function numcatetos(n)
Dim p, q, r, s, t, nm
q = n * n: p = 0
While q Mod 2 = 0: q = q / 2: p = p + 1: Wend 'Extraemos
la potencia de 2
If p = 1 Then nm = 0:
Exit Function 'Caso
imposible
'q es la parte impar
If q = 1 And p > 1
Then nm = Int((p - 1) / 2) + (p - 1) Mod 2
'Es potencia de 2 pura
If p = 0 And q > 1 Then t = fsigma(q, 0): nm = Int(t /
2) + t Mod 2
'Es
un número impar
If p > 1 And q >
1 Then t = fsigma(q, 0): nm = t * Int((p - 1) / 2) + ((p - 1) Mod 2) * (Int(t /
2) + t Mod 2)
numcatetos = nm - 1
'Tiene
parte par y parte impar
End Function
Con
esta función doy por terminado el tema del número de ternas pitagóricas que
produce un número dado, tanto como hipotenusa como siendo un cateto.