51 lines
1.6 KiB
VB.net
51 lines
1.6 KiB
VB.net
' Bernoulli numbers - vb.net - 06/03/2017
|
|
Imports System.Numerics 'BigInteger
|
|
|
|
Module Bernoulli_numbers
|
|
|
|
Function gcd_BigInt(ByVal x As BigInteger, ByVal y As BigInteger) As BigInteger
|
|
Dim y2 As BigInteger
|
|
x = BigInteger.Abs(x)
|
|
Do
|
|
y2 = BigInteger.Remainder(x, y)
|
|
x = y
|
|
y = y2
|
|
Loop Until y = 0
|
|
Return x
|
|
End Function 'gcd_BigInt
|
|
|
|
Sub bernoul_BigInt(n As Integer, ByRef bnum As BigInteger, ByRef bden As BigInteger)
|
|
Dim j, m As Integer
|
|
Dim f As BigInteger
|
|
Dim anum(), aden() As BigInteger
|
|
ReDim anum(n + 1), aden(n + 1)
|
|
For m = 0 To n
|
|
anum(m + 1) = 1
|
|
aden(m + 1) = m + 1
|
|
For j = m To 1 Step -1
|
|
anum(j) = j * (aden(j + 1) * anum(j) - aden(j) * anum(j + 1))
|
|
aden(j) = aden(j) * aden(j + 1)
|
|
f = gcd_BigInt(BigInteger.Abs(anum(j)), BigInteger.Abs(aden(j)))
|
|
If f <> 1 Then
|
|
anum(j) = anum(j) / f
|
|
aden(j) = aden(j) / f
|
|
End If
|
|
Next
|
|
Next
|
|
bnum = anum(1) : bden = aden(1)
|
|
End Sub 'bernoul_BigInt
|
|
|
|
Sub bernoulli_BigInt()
|
|
Dim i As Integer
|
|
Dim bnum, bden As BigInteger
|
|
bnum = 0 : bden = 0
|
|
For i = 0 To 60
|
|
bernoul_BigInt(i, bnum, bden)
|
|
If bnum <> 0 Then
|
|
Console.WriteLine("B(" & i & ")=" & bnum.ToString("D") & "/" & bden.ToString("D"))
|
|
End If
|
|
Next i
|
|
End Sub 'bernoulli_BigInt
|
|
|
|
End Module 'Bernoulli_numbers
|