Skip to content

TriangularNumbers ​

The triangular numbers 1,3,6,10,…1, 3, 6, 10, … — T(n)=n(n+1)/2T(n) = n(n+1)/2 — dots in a triangle.

TriangularNumbersT(n)=n(n+1)/2T(n) = n(n+1)/2 for n=1,2,3,…n = 1, 2, 3, ….

Domain: Collections

Details
  • A lazy indexed collection: Count(TriangularNumbers)=+∞Count(TriangularNumbers) = +\infty, and At(TriangularNumbers,k)=k(k+1)/2At(TriangularNumbers, k) = k(k+1)/2 unranks in closed form -- At(TriangularNumbers,5)=15At(TriangularNumbers, 5) = 15.
  • OEIS A000217.
  • Membership goes through Element by inverting the closed form exactly: xx is triangular iff 8x+18x+1 is a perfect square -- Element(15,TriangularNumbers)Element(15, TriangularNumbers) is true, Element(14,TriangularNumbers)Element(14, TriangularNumbers) is false.
  • The kk-gonal case k=3k=3 of PolygonalNumbers.

Definition

Epsil, as the implementation runs it.

count()

PositiveInfinity

unrank(_r)

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

rank(_x)

Apply(
       (sq_at: integer) => sq_at if (sq_at + 1) * (1 * (sq_at + 1) - -1) / 2 ==
                                    _x else -1,
       Fold(Function(
                      sq_at + 2 ^ sq_b if (sq_at + 2 ^ sq_b + 1) * (1 * (sq_at +
                                                                         2 ^
                                                                         sq_b + 1) -
                                                                    -1) / 2 <= _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) => (sq_at + 1) * (1 * (sq_at + 1) - -1) / 2 == _x,
       Fold(Function(
                      sq_at + 2 ^ sq_b if (sq_at + 2 ^ sq_b + 1) * (1 * (sq_at +
                                                                         2 ^
                                                                         sq_b + 1) -
                                                                    -1) / 2 <= _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
Properties #
live ↗
In15∈TriangularNumbers15∈\mathrm{TriangularNumbers}OutTrue\mathrm{True}
live ↗
In14∈TriangularNumbers14∈\mathrm{TriangularNumbers}OutFalse\mathrm{False}
About
Examples3
CrosswalkOEISWolfram LanguageSageMath

See also: PolygonalNumbers, SquareNumbers, PentagonalNumbers, Count, At, Element