extern void fff_combination(unsigned int* x, unsigned int k, unsigned int n, unsigned long magic) { unsigned long int kk, nn, i; unsigned long int m = magic; unsigned int *bx = x; unsigned long int c; /* Ensure 0 <= magic < Cn,k */ c = _combinations(k, n); m = magic % c; /* Loop. At the beginning of each iteration, c == Cn-(i+1),k-(i+1). */ i = 0; kk = k; nn = n; kk = k; while( kk > 0 ) { nn --; c = _combinations(kk-1, nn); /* If i is accepted, then store it and do: kk-- */ if ( m < c ) { *bx = i; bx ++; kk --; } else m = m - c; /* Next candidate */ i ++; } return; }
double Pascal::_combinations(double row, double index) { if (index < 1) return 1; return (row / index) * _combinations(row - 1, index - 1); }
int Pascal::Combinations(int row, int index) { return _combinations(row, index); }