RosettaCodeData/Task/Mian-Chowla-sequence/Visual-Basic-.NET/mian-chowla-sequence.vb

28 lines
1.1 KiB
VB.net

Module Module1
Function MianChowla(ByVal n As Integer) As Integer()
Dim mc(n - 1) As Integer, sums, ts As New HashSet(Of Integer),
sum As Integer : mc(0) = 1 : sums.Add(2)
For i As Integer = 1 To n - 1
For j As Integer = mc(i - 1) + 1 To Integer.MaxValue
mc(i) = j
For k As Integer = 0 To i
sum = mc(k) + j
If sums.Contains(sum) Then ts.Clear() : Exit For
ts.Add(sum)
Next
If ts.Count > 0 Then sums.UnionWith(ts) : Exit For
Next
Next
Return mc
End Function
Sub Main(ByVal args As String())
Const n As Integer = 100
Dim sw As New Stopwatch(), str As String = " of the Mian-Chowla sequence are:" & vbLf
sw.Start() : Dim mc As Integer() = MianChowla(n) : sw.Stop()
Console.Write("The first 30 terms{1}{2}{0}{0}Terms 91 to 100{1}{3}{0}{0}" &
"Computation time was {4}ms.{0}", vbLf, str,
String.Join(" ", mc.Take(30)), String.Join(" ", mc.Skip(n - 10)), sw.ElapsedMilliseconds)
End Sub
End Module