#include "combinatoire.h" #include #include unsigned long cmb_factorielle (unsigned long n) { unsigned long i; unsigned long f = 1; for (i = 2; i <= n; i++) { assert (f < ULONG_MAX / n); f *= i; } return f; } unsigned long cmb_combinaison (unsigned long n, unsigned long p) // on utilise le faite que le produit de k entiers // consécutifs est divisible par k! { unsigned long i; unsigned long c = n; assert(n >= p) ; for (i = n - 1; i >= n - p + 1; i--) { assert (c < ULONG_MAX / i); c = (i * c) / (n - i + 1); } return c; } unsigned long cmb_arrangement (unsigned long n, unsigned long p) /* n * n-1 * ... * n-p+1 */ { unsigned long i; unsigned long a = n ; assert(n >= p) ; for (i = n - 1; i >= n - p + 1; i--) { assert (a < ULONG_MAX / i); a = i * a ; } return a; } unsigned long cmb_catalan (unsigned long n) { return cmb_combinaison (2 * n - 2, n - 1) / n; }