/*
This program computes the total number of lottery combinations for:
- choosing 6 numbers out of 37
- choosing 1 power number out of 7
Total combinations = C(37,6) * C(7,1)
We implement an idiomatic binomial coefficient function using the
multiplicative formula:
C(n, k) = product(i = 1..k) of (n - k + i) / i
Why this method?
- Avoids huge factorials (37! is far too large for JS/TS numbers)
- Keeps intermediate values small and exact
- Efficient, clean, and idiomatic TypeScript
*/
function binomialCoefficient(n: number, k: number): number {
if (k > n) return 0;
// Use symmetry: C(n, k) == C(n, n-k)
if (k > n - k) {
k = n - k;
}
let result: number = 1;
for (let i: number = 1; i <= k; i++) {
result = (result * (n - k + i)) / i;
}
return result;
}
/* Main program */
const mainN: number = 37;
const mainK: number = 6;
const powerN: number = 7;
const powerK: number = 1;
const mainCombos: number = binomialCoefficient(mainN, mainK);
const powerCombos: number = binomialCoefficient(powerN, powerK);
const total: number = mainCombos * powerCombos;
console.log("Main combinations (C(37,6)): " + mainCombos);
console.log("Power combinations (C(7,1)): " + powerCombos);
console.log("Total lottery combinations: " + total);
/*
run:
Main combinations (C(37,6)): 2324784
Power combinations (C(7,1)): 7
Total lottery combinations: 16273488
*/