2026-04-30 12:34:36 -04:00
|
|
|
/**
|
|
|
|
|
* Calculates the binomial coefficient n choose k
|
|
|
|
|
*
|
|
|
|
|
* @param {number} n
|
|
|
|
|
* @param {number} k
|
|
|
|
|
*/
|
|
|
|
|
function nCk(n, k) {
|
|
|
|
|
if (k < 0 || k > n) return 0;
|
2023-07-01 11:58:00 -04:00
|
|
|
|
2026-04-30 12:34:36 -04:00
|
|
|
let result = 1;
|
2023-07-01 11:58:00 -04:00
|
|
|
|
2026-04-30 12:34:36 -04:00
|
|
|
for (let i = 0; i < k; i++) {
|
|
|
|
|
// `result *= (n - i) / (i + 1)` can cause floating point errors
|
|
|
|
|
result = result * (n - i) / (i + 1);
|
|
|
|
|
}
|
2023-07-01 11:58:00 -04:00
|
|
|
|
2026-04-30 12:34:36 -04:00
|
|
|
return result;
|
2023-07-01 11:58:00 -04:00
|
|
|
}
|
|
|
|
|
|
2026-04-30 12:34:36 -04:00
|
|
|
console.log(nCk(5, 3));
|