58 lines
1.5 KiB
VB.net
58 lines
1.5 KiB
VB.net
Imports System.Numerics
|
|
|
|
Module Module1
|
|
|
|
Function Factorial(n As BigInteger) As BigInteger
|
|
If n = 0 Then
|
|
Return 1
|
|
End If
|
|
|
|
Dim res As BigInteger = 1
|
|
While n > 0
|
|
res *= n
|
|
n -= 1
|
|
End While
|
|
Return res
|
|
End Function
|
|
|
|
Function Lah(n As BigInteger, k As BigInteger) As BigInteger
|
|
If k = 1 Then
|
|
Return Factorial(n)
|
|
End If
|
|
If k = n Then
|
|
Return 1
|
|
End If
|
|
If k > n Then
|
|
Return 0
|
|
End If
|
|
If k < 1 OrElse n < 1 Then
|
|
Return 0
|
|
End If
|
|
Return (Factorial(n) * Factorial(n - 1)) / (Factorial(k) * Factorial(k - 1)) / Factorial(n - k)
|
|
End Function
|
|
|
|
Sub Main()
|
|
Console.WriteLine("Unsigned Lah numbers: L(n, k):")
|
|
Console.Write("n/k ")
|
|
For Each i In Enumerable.Range(0, 13)
|
|
Console.Write("{0,10} ", i)
|
|
Next
|
|
Console.WriteLine()
|
|
|
|
For Each row In Enumerable.Range(0, 13)
|
|
Console.Write("{0,-3}", row)
|
|
For Each i In Enumerable.Range(0, row + 1)
|
|
Dim l = Lah(row, i)
|
|
Console.Write("{0,11}", l)
|
|
Next
|
|
Console.WriteLine()
|
|
Next
|
|
Console.WriteLine()
|
|
|
|
Console.WriteLine("Maximum value from the L(100, *) row:")
|
|
Dim maxVal = Enumerable.Range(0, 100).Select(Function(a) Lah(100, a)).Max
|
|
Console.WriteLine(maxVal)
|
|
End Sub
|
|
|
|
End Module
|