Binomial number system

The Endeavour 2025-06-05

I just stumbled across the binomial number system in Exercise 5.38 of Concrete Mathematics. The exercise asks the reader to show that every non-negative integer n can be written as

n = \binom{a}{1} + \binom{b}{2} + \binom{c}{3}

and that the representation is unique if you require 0 ≤ abc. The book calls this the binomial number system. I skimmed a paper that said this has some application in signal processing, but I haven’t looked at it closely.

You can find ab, and c much as you would find the representation in many other number systems: first find the largest possible c, then the largest possible b for what’s left, and then the remainder is a.

In order to find c, we start with the observation that the binomial coefficient C(k, 3) is less than k³/6 and so c is less than the cube root of 6n. We can use this as an initial lower bound on c then search incrementally. If we wanted to be more efficient, we could do some sort of binary search.

Here’s Python code to find ab, and c.

from math import comb, factorialdef lower(n, r):    "Find largest k such that comb(k, r) < n."    k = int( (factorial(r)*n)**(1/r) ) # initial guess    while comb(k, r) < n:         k += 1     return k - 1 def binomial_rep(n):     c = lower(n, 3)     cc = comb(c, 3)     b = lower(n - comb(c, 3), 2)     bb = comb(b, 2)     a = n - cc - bb     assert(c > b > a >= 0)    return (a, b, c)

For example, here’s the binomial number system representation of today’s date.

>>> binomial_rep(20250605)(79, 269, 496)>>> comb(496, 3) + comb(269, 2) + comb(79, 1)20250605

You could use any number of binomial terms, not just three.

The post Binomial number system first appeared on John D. Cook.