and 1 contributors

NAME

Math::NumSeq::Triangular -- triangular numbers

SYNOPSIS

use Math::NumSeq::Triangular;
my \$seq = Math::NumSeq::Triangular->new;
my (\$i, \$value) = \$seq->next;

DESCRIPTION

The triangular numbers i*(i+1)/2,

0, 1, 3, 6, 10, 15, 21, 28, ...
starting i=0

The numbers are how many points are in an equilateral triangle of side i,

*      i=1  1

*      i=2  3
* *

*
* *     i=3  6
* * *

*
* *     i=4  10
* * *
* * * *

From a given i, the next value is formed by adding i+1, being a new row of that length on the bottom of the triangle.

FUNCTIONS

See "FUNCTIONS" in Math::NumSeq for behaviour common to all sequence classes.

\$seq = Math::NumSeq::Triangular->new ()

Create and return a new sequence object.

Random Access

\$value = \$seq->ith(\$i)

Return \$i*(\$i+1)/2.

\$bool = \$seq->pred(\$value)

Return true if \$value is a triangular number, ie. i*(i+1)/2 for some integer i.

\$i = \$seq->value_to_i_ceil(\$value)
\$i = \$seq->value_to_i_floor(\$value)

Return the index i of \$value, or if \$value is not a triangular number then the next higher for ceil or lower for floor.

\$i = \$seq->value_to_i_estimate(\$value)

Return an estimate of the i corresponding to \$value. This is value=i*(i+1)/2 is inverted to

\$i = int ((sqrt(8*\$value + 1) - 1)/2)