Provides utilities to compute Catalan numbers using dynamic programming. A Catalan numbers satisfy these recurrence relations: C(0) = C(1) = 1; C(n) = sum(C(i).C(n-i-1)), for i = 0 to n-1 Read more about Catalan numbers here: https://en.wikipedia.org/wiki/Catalan_number https://oeis.org/A000108/.
More...
#include <cassert>
#include <cstdint>
#include <cstdlib>
#include <numeric>
#include <vector>
Provides utilities to compute Catalan numbers using dynamic programming. A Catalan numbers satisfy these recurrence relations: C(0) = C(1) = 1; C(n) = sum(C(i).C(n-i-1)), for i = 0 to n-1 Read more about Catalan numbers here: https://en.wikipedia.org/wiki/Catalan_number https://oeis.org/A000108/.
◆ main()
78 {
79 test_catalan_numbers_up_to_20();
80 test_catalan_numbers_25();
81}
◆ test_catalan_numbers_25()
| void test_catalan_numbers_25 |
( |
| ) |
|
72 {
73
75 assert(cn.
get(25) == 4861946401452ULL);
76}
computes and caches Catalan numbers
Definition catalan_numbers.cpp:21
value_type get(std::size_t n)
computes the n-th Catalan number and updates the cache.
Definition catalan_numbers.cpp:38
◆ test_catalan_numbers_up_to_20()
| void test_catalan_numbers_up_to_20 |
( |
| ) |
|
46 {
47
49 assert(cn.
get(0) == 1ULL);
50 assert(cn.
get(1) == 1ULL);
51 assert(cn.
get(2) == 2ULL);
52 assert(cn.
get(3) == 5ULL);
53 assert(cn.
get(4) == 14ULL);
54 assert(cn.
get(5) == 42ULL);
55 assert(cn.
get(6) == 132ULL);
56 assert(cn.
get(7) == 429ULL);
57 assert(cn.
get(8) == 1430ULL);
58 assert(cn.
get(9) == 4862ULL);
59 assert(cn.
get(10) == 16796ULL);
60 assert(cn.
get(11) == 58786ULL);
61 assert(cn.
get(12) == 208012ULL);
62 assert(cn.
get(13) == 742900ULL);
63 assert(cn.
get(14) == 2674440ULL);
64 assert(cn.
get(15) == 9694845ULL);
65 assert(cn.
get(16) == 35357670ULL);
66 assert(cn.
get(17) == 129644790ULL);
67 assert(cn.
get(18) == 477638700ULL);
68 assert(cn.
get(19) == 1767263190ULL);
69 assert(cn.
get(20) == 6564120420ULL);
70}