>>858 unsigned long combination(int n, int k) { int i, j; unsigned long a[17];
if (n - k < k) k = n - k; if (k == 0) return 1; if (k == 1) return n; if (k > 17) return 0; /* error */ for (i = 1; i < k; i++) a[i] = i + 2; for (i = 3; i <= n - k + 1; i++) { a[0] = i; for (j = 1; j < k; j++) a[j] += a[j - 1]; } return a[k - 1]; }