Skip to content

CenteredTriangularNumbers ​

The centered triangular numbers 1,4,10,19,…1, 4, 10, 19, … — (3n2−3n+2)/2(3n^2-3n+2)/2 — a triangle of dots grown ring by ring around a center.

CenteredTriangularNumbers(3n2−3n+2)/2(3n^2-3n+2)/2 for n=1,2,3,…n = 1, 2, 3, ….

Domain: Collections

Details
  • A lazy indexed collection: Count(CenteredTriangularNumbers)=+∞Count(CenteredTriangularNumbers) = +\infty, and At(CenteredTriangularNumbers,k)=(3k2−3k+2)/2At(CenteredTriangularNumbers, k) = (3k^2-3k+2)/2 unranks in closed form -- At(CenteredTriangularNumbers,5)=31At(CenteredTriangularNumbers, 5) = 31.
  • OEIS A005448.
  • Membership goes through Element by inverting the closed form exactly -- Element(31,CenteredTriangularNumbers)Element(31, CenteredTriangularNumbers) is true, Element(30,CenteredTriangularNumbers)Element(30, CenteredTriangularNumbers) is false.

Definition

Epsil, as the implementation runs it.

count()

PositiveInfinity

unrank(_r)

3 * ((_r + 1) * (_r + 1 - 1) / 2) + 1

rank(_x)

Apply(
       (sq_at: integer) => sq_at if 3 * ((sq_at + 1) * (sq_at + 1 - 1) / 2) + 1 ==
                                    _x else -1,
       Fold(Function(
                      sq_at + 2 ^ sq_b if 3 * ((sq_at + 2 ^ sq_b + 1) * (sq_at +
                                                                         2 ^
                                                                         sq_b + 1 -
                                                                         1) / 2) +
                                          1 <= _x else sq_at,
                      sq_at,
                      sq_b,
                    ), 0, Range(Floor(Log(_x, 2)) + 1, 0, -1)),
     ) if True else -1

valid(_x)

Apply(
       (sq_at: integer) => 3 * ((sq_at + 1) * (sq_at + 1 - 1) / 2) + 1 == _x,
       Fold(Function(
                      sq_at + 2 ^ sq_b if 3 * ((sq_at + 2 ^ sq_b + 1) * (sq_at +
                                                                         2 ^
                                                                         sq_b + 1 -
                                                                         1) / 2) +
                                          1 <= _x else sq_at,
                      sq_at,
                      sq_b,
                    ), 0, Range(Floor(Log(_x, 2)) + 1, 0, -1)),
     ) if True && _x >= 1 else False

Enumeration

Examples

1 more kept as data, checked against the oracles
About
Examples1
CrosswalkOEIS

See also: TriangularNumbers, CenteredSquareNumbers, Count, At, Element