HP
Prime: Sums and Differences of Triangular
Numbers, Triangular Numbers functions

Benjamin
Vitale, author of the Fun With Numb3rs blog (https://benvitalenum3ers.wordpress.com) wrote:

Consider
the following system of equations:

T_a
+ T_b = T_c

T_a
– T_b = T_d

Where
T represents triangular numbers, which is defined by:

T_n
= n * (n+1)/2 where n is a positive integer

Source
Link: https://benvitalenum3ers.wordpress.com/2015/04/13/triangular-number-system-of-equations/

(Retrieved
April 16, 2015)

Then:

T_a
+ T_b = T_c

T_a
– T_b = T_d

Let:

a*(a+1)/2
+ b*(b+1)/2 = C

a*(a+1)/2
– b*(b+1)/2 = D

C
and D need to be tested to determine if they are both triangular numbers, which
is fairly easy to check. Without loss of
generality, let:

C
= n*(n+1)/2

2*C
= n*(n+1)

2*C
= n^2 + n

0
= n^2 + n – 2*C

Solving
for n:

n
= (-1 ± √(1^2 – 4*-1*2*C))/2

Since
we are looking integers where n>0, we can state that:

n
= (-1 + √(1^2 – 4*-1*2*C))/2

n
= (-1 + √(1 – 8*C))/2

n
= -.5 + √((1 – 8*C)/4)

n
= -.5 + √(.25 – 2*C)

If
frac(n) = 0, we have a solution. (frac
stands the fraction function)

The
program TRIINTEST will list pairs of triangular numbers. The argument of TRIINTEST(n), where n is
upper limit of T_n to be tested.

HP
Prime Program: TRIINTEST

EXPORT
TRIINTTEST(u)

BEGIN

//
2014-04-18

LOCAL
a,b,c,d;

LOCAL
A,B,C,D;

//
matrix starter

LOCAL
m:=[[0,0]];

LOCAL
s:=2;

FOR
a FROM 2 TO u DO

FOR
b FROM 1 TO a DO

A:=(a^2+a)/2;

B:=(b^2+b)/2;

C:=A+B;

D:=A-B;

c:=−.5+√(.25+2*C);

d:=−.5+√(.25+2*D);

IF
FP(c)==0 AND FP(d)==0 THEN

ADDROW(m,[A,B],s);

s:=s+1;

END;

END;

END;

//
clean up

DELROW(m,1);

RETURN
m;

END;

Finding
pairs from T_1 to T_50:

[[
3, 3 ]

[
21, 15 ]

[
105, 105 ]

[
171, 105 ]

[
703, 378 ]

[
990, 780 ]]

Here
are the functions TRINUM and ITRINUM:

TRINUM(n): returns the nth triangular number.

ITRINUM(t): test whether t is a triangular number. If t is not a triangular number, -1 is
returned.

Program
TRINUM:

EXPORT
TRINUM(N)

BEGIN

//
triangular number

RETURN
N*(N+1)/2;

END;

Program
ITRINUM:

EXPORT ITRINUM(T)

BEGIN

// inverse triangular number

// returns −1 if not a triangular

// number

LOCAL t:=(−.5+√(.25+2*T));

IF FP(t)==0 THEN

RETURN t;

ELSE

RETURN −1;

END;

END;

Examples:

TRINUM(15)
= 120 (15

^{th}triangular number)
ITRINUM(276)
= 23 (276 is the 23

^{rd}triangular number)
ITRINUM(572)
returns -1 (572 is not a triangular
number)

This
blog is property of Edward Shore. 2015

I've got to play around with these as well as some of the others on Benjamin's blog.

ReplyDelete