Для катетов.

Пусть

, тогда

Это формула папы?
Вот функция на pari/gp которая печатает все тройки с катетом x, в точности как в вашей распечатке
Код:
? leg_triple(x)=my(c=0,x2=x^2,a,b );fordiv(x2,a,b=x2/a;if(a<b && (a+b)%2==0,print(c++," | ",x," | ",(b-a)/2," ",(a+b)/2," ",a)))
Для гипотенуз.
Тут немножко помореченнее, но если кратко, то это алгоритм Евклида, см.
«Разложение числа в сумму двух квадратов»