Successive prime differences: Difference between revisions

Content added Content deleted
m (→‎{{header|Perl}}: print not say)
Line 1,744: Line 1,744:
...for differences [6, 4, 2], there are 306 groups, where the first group = [31, 37, 41, 43] and the last group = [997141, 997147, 997151, 997153]
...for differences [6, 4, 2], there are 306 groups, where the first group = [31, 37, 41, 43] and the last group = [997141, 997147, 997151, 997153]
</pre>
</pre>

=={{header|Visual Basic .NET}}==
{{trans|Java}}
<lang vbnet>Imports System.Text

Module Module1

Function Sieve(limit As Integer) As Integer()
Dim primes As New List(Of Integer) From {2}
Dim c(limit + 1) As Boolean REM composite = true
REM no need to process even numbers > 2
Dim p = 3
While True
Dim p2 = p * p
If p2 > limit Then
Exit While
End If
For i = p2 To limit Step 2 * p
c(i) = True
Next
Do
p += 2
Loop While c(p)
End While
For i = 3 To limit Step 2
If Not c(i) Then
primes.Add(i)
End If
Next
Return primes.ToArray
End Function

Function SuccessivePrimes(primes() As Integer, diffs() As Integer) As List(Of List(Of Integer))
Dim results As New List(Of List(Of Integer))
Dim dl = diffs.Length
Dim i = 0
While i < primes.Length - dl
Dim group(dl) As Integer
group(0) = primes(i)

Dim j = i
While j < i + dl
If primes(j + 1) - primes(j) <> diffs(j - i) Then
GoTo outer REM continue the outermost loop
End If
group(j - i + 1) = primes(j + 1)

j += 1
End While
results.Add(group.ToList)
outer:
i += 1
End While
Return results
End Function

Function CollectionToString(Of T)(c As IEnumerable(Of T)) As String
Dim builder As New StringBuilder
builder.Append("[")

Dim it = c.GetEnumerator()
If it.MoveNext() Then
builder.Append(it.Current)
End If
While it.MoveNext()
builder.Append(", ")
builder.Append(it.Current)
End While

builder.Append("]")
Return builder.ToString
End Function

Sub Main()
Dim primes = Sieve(999999)
Dim diffsList = {({2}), ({1}), ({2, 2}), ({2, 4}), ({4, 2}), ({6, 4, 2})}
Console.WriteLine("For primes less than 1,000,000:-")
Console.WriteLine()
For Each diffs In diffsList
Console.WriteLine(" For differences of {0} ->", CollectionToString(diffs))
Dim sp = SuccessivePrimes(primes, diffs)
If sp.Count = 0 Then
Console.WriteLine(" No groups found")
Continue For
End If
Console.WriteLine(" First group = {0}", CollectionToString(sp(0)))
Console.WriteLine(" Last group = {0}", CollectionToString(sp(sp.Count - 1)))
Console.WriteLine(" Number found = {0}", sp.Count)
Console.WriteLine()
Next
End Sub

End Module</lang>
{{out}}
<pre>For primes less than 1,000,000:-

For differences of [2] ->
First group = [3, 5]
Last group = [999959, 999961]
Number found = 8169

For differences of [1] ->
First group = [2, 3]
Last group = [2, 3]
Number found = 1

For differences of [2, 2] ->
First group = [3, 5, 7]
Last group = [3, 5, 7]
Number found = 1

For differences of [2, 4] ->
First group = [5, 7, 11]
Last group = [999431, 999433, 999437]
Number found = 1393

For differences of [4, 2] ->
First group = [7, 11, 13]
Last group = [997807, 997811, 997813]
Number found = 1444

For differences of [6, 4, 2] ->
First group = [31, 37, 41, 43]
Last group = [997141, 997147, 997151, 997153]
Number found = 306</pre>


=={{header|Wren}}==
=={{header|Wren}}==