and 1 contributors

NAME

Math::NumSeq::Pronic -- pronic numbers

SYNOPSIS

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

DESCRIPTION

The pronic numbers i*(i+1),

0, 2, 6, 12, 20, 30, ...
starting i=0

These are twice the triangular numbers, and half way between the perfect squares.

FUNCTIONS

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

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

Create and return a new sequence object.

Iterating

\$seq->seek_to_i(\$i)

Move the current sequence position to \$i. The next call to next() will return \$i and corresponding value.

\$seq->seek_to_value(\$value)

Move the current sequence position so that next() will give \$value on the next call, or if \$value is not a pronic number then the next pronic above \$value.

Random Access

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

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

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

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

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

Return the \$i index of \$value, rounding up or down if \$value is not a pronic number.

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

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

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