Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
163
Task/Faulhabers-formula/Visual-Basic-.NET/faulhabers-formula.vb
Normal file
163
Task/Faulhabers-formula/Visual-Basic-.NET/faulhabers-formula.vb
Normal file
|
|
@ -0,0 +1,163 @@
|
|||
Module Module1
|
||||
Function Gcd(a As Long, b As Long)
|
||||
If b = 0 Then
|
||||
Return a
|
||||
End If
|
||||
Return Gcd(b, a Mod b)
|
||||
End Function
|
||||
|
||||
Class Frac
|
||||
ReadOnly num As Long
|
||||
ReadOnly denom As Long
|
||||
|
||||
Public Shared ReadOnly ZERO As New Frac(0, 1)
|
||||
Public Shared ReadOnly ONE As New Frac(1, 1)
|
||||
|
||||
Public Sub New(n As Long, d As Long)
|
||||
If d = 0 Then Throw New ArgumentException("d must not be zero")
|
||||
Dim nn = n
|
||||
Dim dd = d
|
||||
If nn = 0 Then
|
||||
dd = 1
|
||||
ElseIf dd < 0 Then
|
||||
nn = -nn
|
||||
dd = -dd
|
||||
End If
|
||||
Dim g = Math.Abs(Gcd(nn, dd))
|
||||
If g > 1 Then
|
||||
nn /= g
|
||||
dd /= g
|
||||
End If
|
||||
num = nn
|
||||
denom = dd
|
||||
End Sub
|
||||
|
||||
Public Shared Operator -(self As Frac) As Frac
|
||||
Return New Frac(-self.num, self.denom)
|
||||
End Operator
|
||||
|
||||
Public Shared Operator +(lhs As Frac, rhs As Frac) As Frac
|
||||
Return New Frac(lhs.num * rhs.denom + lhs.denom * rhs.num, rhs.denom * lhs.denom)
|
||||
End Operator
|
||||
|
||||
Public Shared Operator -(lhs As Frac, rhs As Frac) As Frac
|
||||
Return lhs + -rhs
|
||||
End Operator
|
||||
|
||||
Public Shared Operator *(lhs As Frac, rhs As Frac) As Frac
|
||||
Return New Frac(lhs.num * rhs.num, lhs.denom * rhs.denom)
|
||||
End Operator
|
||||
|
||||
Public Shared Operator <(lhs As Frac, rhs As Frac) As Boolean
|
||||
Dim x = lhs.num / lhs.denom
|
||||
Dim y = rhs.num / rhs.denom
|
||||
Return x < y
|
||||
End Operator
|
||||
|
||||
Public Shared Operator >(lhs As Frac, rhs As Frac) As Boolean
|
||||
Dim x = lhs.num / lhs.denom
|
||||
Dim y = rhs.num / rhs.denom
|
||||
Return x > y
|
||||
End Operator
|
||||
|
||||
Public Shared Operator =(lhs As Frac, rhs As Frac) As Boolean
|
||||
Return lhs.num = rhs.num AndAlso lhs.denom = rhs.denom
|
||||
End Operator
|
||||
|
||||
Public Shared Operator <>(lhs As Frac, rhs As Frac) As Boolean
|
||||
Return lhs.num <> rhs.num OrElse lhs.denom <> rhs.denom
|
||||
End Operator
|
||||
|
||||
Public Overloads Function Equals(obj As Object) As Boolean
|
||||
Dim frac = CType(obj, Frac)
|
||||
Return Not IsNothing(frac) AndAlso num = frac.num AndAlso denom = frac.denom
|
||||
End Function
|
||||
|
||||
Public Overloads Function GetHashCode() As Integer
|
||||
Dim hashCode = 1317992671
|
||||
hashCode = hashCode * -1521134295 + num.GetHashCode()
|
||||
hashCode = hashCode * -1521134295 + denom.GetHashCode()
|
||||
Return hashCode
|
||||
End Function
|
||||
|
||||
Public Overloads Function ToString() As String
|
||||
If denom = 1 Then Return num.ToString()
|
||||
Return String.Format("{0}/{1}", num, denom)
|
||||
End Function
|
||||
End Class
|
||||
|
||||
Function Bernoulli(n As Integer) As Frac
|
||||
If n < 0 Then Throw New ArgumentException("n may not be negative or zero")
|
||||
Dim a(n + 1) As Frac
|
||||
For m = 0 To n
|
||||
a(m) = New Frac(1, m + 1)
|
||||
For j = m To 1 Step -1
|
||||
a(j - 1) = (a(j - 1) - a(j)) * New Frac(j, 1)
|
||||
Next
|
||||
Next
|
||||
'returns the first Bernoulli number
|
||||
If n <> 1 Then Return a(0)
|
||||
Return -a(0)
|
||||
End Function
|
||||
|
||||
Function Binomial(n As Integer, k As Integer) As Integer
|
||||
If n < 0 OrElse k < 0 OrElse n < k Then
|
||||
Throw New ArgumentException()
|
||||
End If
|
||||
If n = 0 OrElse k = 0 Then
|
||||
Return 1
|
||||
End If
|
||||
Dim num = 1
|
||||
For i = k + 1 To n
|
||||
num *= i
|
||||
Next
|
||||
Dim denom = 1
|
||||
For i = 2 To n - k
|
||||
denom *= i
|
||||
Next
|
||||
Return num / denom
|
||||
End Function
|
||||
|
||||
Sub Faulhaber(p As Integer)
|
||||
Console.Write("{0} : ", p)
|
||||
Dim q As New Frac(1, p + 1)
|
||||
Dim sign = -1
|
||||
For j = 0 To p
|
||||
sign *= -1
|
||||
Dim coeff = q * New Frac(sign, 1) * New Frac(Binomial(p + 1, j), 1) * Bernoulli(j)
|
||||
If Frac.ZERO = coeff Then Continue For
|
||||
If j = 0 Then
|
||||
If Frac.ONE <> coeff Then
|
||||
If -Frac.ONE = coeff Then
|
||||
Console.Write("-")
|
||||
Else
|
||||
Console.Write(coeff.ToString())
|
||||
End If
|
||||
End If
|
||||
Else
|
||||
If Frac.ONE = coeff Then
|
||||
Console.Write(" + ")
|
||||
ElseIf -Frac.ONE = coeff Then
|
||||
Console.Write(" - ")
|
||||
ElseIf Frac.ZERO < coeff Then
|
||||
Console.Write(" + {0}", coeff.ToString())
|
||||
Else
|
||||
Console.Write(" - {0}", (-coeff).ToString())
|
||||
End If
|
||||
End If
|
||||
Dim pwr = p + 1 - j
|
||||
If pwr > 1 Then
|
||||
Console.Write("n^{0}", pwr)
|
||||
Else
|
||||
Console.Write("n")
|
||||
End If
|
||||
Next
|
||||
Console.WriteLine()
|
||||
End Sub
|
||||
|
||||
Sub Main()
|
||||
For i = 0 To 9
|
||||
Faulhaber(i)
|
||||
Next
|
||||
End Sub
|
||||
End Module
|
||||
Loading…
Add table
Add a link
Reference in a new issue