40 T choose(
unsigned n,
unsigned k) {
41 static std::vector<T> pascals_triangle;
42 static unsigned rows_done = 0;
48 pascals_triangle.push_back(1);
51 while(rows_done <= n) {
52 unsigned p = pascals_triangle.size() - rows_done;
53 pascals_triangle.push_back(1);
54 for(
unsigned i = 0; i < rows_done-1; i++) {
55 pascals_triangle.push_back(pascals_triangle[p]
56 + pascals_triangle[p+1]);
59 pascals_triangle.push_back(1);
63 unsigned row = (n*(n+1))/2;
64 return pascals_triangle[row+k];