RosettaCodeData/Task/Combinations-and-permutations/Visual-Basic-.NET/combinations-and-permutatio...

70 lines
2.0 KiB
Plaintext

' Combinations and permutations - 10/04/2017
Imports System.Numerics 'BigInteger
Module CombPermRc
Sub Main()
Dim i, j As Long
For i = 1 To 12
For j = 1 To i
Console.Write("P(" & i & "," & j & ")=" & PermBig(i, j).ToString & " ")
Next j
Console.WriteLine("")
Next i
Console.WriteLine("--")
For i = 10 To 60 Step 10
For j = 1 To i Step i \ 5
Console.Write("C(" & i & "," & j & ")=" & CombBig(i, j).ToString & " ")
Next j
Console.WriteLine("")
Next i
Console.WriteLine("--")
For i = 5000 To 15000 Step 5000
For j = 4000 To 5000 Step 1000
Console.Write("P(" & i & "," & j & ")=" & PermBig(i, j).ToString("E") & " ")
Next j
Console.WriteLine("")
Next i
Console.WriteLine("--")
For i = 5000 To 15000 Step 5000
For j = 4000 To 5000 Step 1000
Console.Write("C(" & i & "," & j & ")=" & CombBig(i, j).ToString("E") & " ")
Next j
Console.WriteLine("")
Next i
Console.WriteLine("--")
i = 5000 : j = 4000
Console.WriteLine("C(" & i & "," & j & ")=" & CombBig(i, j).ToString)
End Sub 'Main
Function PermBig(x As Long, y As Long) As BigInteger
Dim i As Long, z As BigInteger
z = 1
For i = x - y + 1 To x
z = z * i
Next i
Return (z)
End Function 'PermBig
Function FactBig(x As Long) As BigInteger
Dim i As Long, z As BigInteger
z = 1
For i = 2 To x
z = z * i
Next i
Return (z)
End Function 'FactBig
Function CombBig(ByVal x As Long, ByVal y As Long) As BigInteger
If y > x Then
Return (0)
ElseIf x = y Then
Return (1)
Else
If x - y < y Then y = x - y
Return (PermBig(x, y) / FactBig(y))
End If
End Function 'CombBig
End Module