local bigint = require "bigint" local fmt = require "fmt" local function bell_triangle(n) local zero = bigint.new(0) local tri = {} for i = 1, n do tri[i] = {} for j = 1, i - 1 do tri[i][j] = zero end end tri[2][1] = bigint.new(1) for i = 3, n do tri[i][1] = tri[i - 1][i - 2] for j = 2, i - 1 do tri[i][j] = tri[i][j - 1] + tri[i - 1][j - 1] end end return tri end local bt = bell_triangle(51) print("First fifteen and fiftieth Bell numbers:") for i = 2, 16 do local s = bt[i][1]:tostring() fmt.print("%2d: %s", i - 1, fmt.int(s)) end local s50 = bt[51][1]:tostring() fmt.print("%2d: %s", 50, fmt.int(s50)) print("\nThe first ten rows of Bell's triangle:") for i = 2, 11 do fmt.tprint("%7s", bt[i]:map(|j| -> fmt.int(j:tostring())), #bt[i]) end