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
and that the representation is unique if you require 0 ≤ a < b < c. 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 [1].
You can find a, b, 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 a, b, and c.
from math import comb, factorial def 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.
[1] I looked back at the paper, and it is using a different kind of binomial number system, expressing numbers as sums of fixed binomial coefficients, not varying the binomial coefficient arguments. This representation has some advantages for error correction.
I wonder if this system can give insights into prime number distribution. By expressing primes in this way, and looking at a,b,c, is anything new revealed?