#include "combinatorics.h" // Function definitions largeint combinations(largeint n, largeint r) { largeint max_den = max(r, n - r); largeint numerator = 1; for ( largeint i = n; i > max_den; --i ) numerator *= i; return numerator / factorial( min(r, n - r) ); } #if 0 // Inneficient way: easily overflows largeints largeint factorial_n = factorial(n); largeint factorial_r = factorial(r); largeint factorial_n_r = factorial(n - r); return factorial_n / (factorial_r * factorial_n_r); // Does the same than the four previous sentences // return factorial(n) / (factorial(r) * factorial(n - r)); #endif largeint factorial(largeint n) { largeint result = 1; for ( largeint i = 1; i <= n; ++i ) result = result * i; return result; }