Skip to content

HexagonalNumbers ​

The hexagonal numbers 1,6,15,28,…1, 6, 15, 28, … — H(n)=n(2n−1)H(n) = n(2n-1) — dots in a hexagon.

HexagonalNumbersH(n)=n(2n−1)H(n) = n(2n-1) for n=1,2,3,…n = 1, 2, 3, ….

Domain: Collections

Details
  • A lazy indexed collection: Count(HexagonalNumbers)=+∞Count(HexagonalNumbers) = +\infty, and At(HexagonalNumbers,k)=k(2k−1)At(HexagonalNumbers, k) = k(2k-1) unranks in closed form -- At(HexagonalNumbers,5)=45At(HexagonalNumbers, 5) = 45.
  • OEIS A000384.
  • Membership goes through Element by inverting the closed form exactly -- Element(45,HexagonalNumbers)Element(45, HexagonalNumbers) is true, Element(44,HexagonalNumbers)Element(44, HexagonalNumbers) is false.
  • Every hexagonal number is triangular (H(n)=T(2n−1)H(n) = T(2n-1)); the kk-gonal case k=6k=6 of PolygonalNumbers.

Definition

Epsil, as the implementation runs it.

count()

PositiveInfinity

unrank(_r)

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

rank(_x)

Apply(
       (sq_at: integer) => sq_at if (sq_at + 1) * (4 * (sq_at + 1) - 2) / 2 ==
                                    _x else -1,
       Fold(Function(
                      sq_at + 2 ^ sq_b if (sq_at + 2 ^ sq_b + 1) * (4 * (sq_at +
                                                                         2 ^
                                                                         sq_b + 1) -
                                                                    2) / 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) * (4 * (sq_at + 1) - 2) / 2 == _x,
       Fold(Function(
                      sq_at + 2 ^ sq_b if (sq_at + 2 ^ sq_b + 1) * (4 * (sq_at +
                                                                         2 ^
                                                                         sq_b + 1) -
                                                                    2) / 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
About
Examples1
CrosswalkOEISWolfram LanguageSageMath

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