Imports System
Module TotalCombinations
''' <summary>
''' Computes the number of combinations C(n, r):
'''
''' C(n, r) = n! / (r! * (n - r)!)
'''
''' The calculation is performed incrementally to avoid
''' computing large factorials.
''' </summary>
Private Function Combinations(n As Integer, r As Integer) As ULong
' Use symmetry: C(n, r) = C(n, n - r)
If r > n - r Then
r = n - r
End If
Dim result As ULong = 1UL
'
' Compute:
'
' n × (n - 1) × ... × (n - r + 1)
' --------------------------------
' 1 × 2 × ... × r
'
' Dividing at each step keeps intermediate values smaller.
'
For i As Integer = 0 To r - 1
result *= CULng(n - i)
result \= CULng(i + 1) ' Integer division
Next
Return result
End Function
Sub Main()
Const TotalNumbers As Integer = 33
Const ChosenNumbers As Integer = 7
Dim totalCombinations As ULong =
Combinations(TotalNumbers, ChosenNumbers)
Console.WriteLine(
$"C({TotalNumbers}, {ChosenNumbers}) = {totalCombinations}")
End Sub
End Module
' run:
'
' C(33, 7) = 4272048
'