Prime triangle: Difference between revisions
→{{header|Visual Basic .NET}}: Incorporate Nigel's even/odd observation (see talk page)
(→{{header|ALGOL 68}}: Use Nigel's observation that the numbers must alternate between even and odd, simplify) |
(→{{header|Visual Basic .NET}}: Incorporate Nigel's even/odd observation (see talk page)) |
||
Line 1,138:
''' <returns>The next number that can follow i or 0 if there isn't one.</returns>
Public Function findNext(ByVal i As Integer, ByVal n As Integer, ByVal current As Integer, ByVal used() As Boolean) As Integer
Dim result As Integer = current +
' The numbers must alternate between even and odd in order for the sum to be prime.
Do While result < n And (Not primePair(i, result) Or used(result))▼
If i Mod 2 = 0 And result
End If
Loop
If result >= n
result = 0
End If
Line 1,165 ⟶ 1,169:
Dim used(n) As Boolean
Dim number(n) As Integer
▲ position(i) = 1
▲ Next i
' The triangle row must have 1 in the leftmost and n in the rightmost elements.
number(1) = 1
Line 1,179:
Do While p < n
Dim pn As Integer = number(p - 1)
Dim [next] As Integer = findNext(pn, n,
If p = n - 1 Then
' We are at the final number before n.
Do While If([next] = 0, False, Not primePair([next], n))
Loop
End If
If [next] <> 0 Then
' have a/another number that can appear at p.
used(
used([next]) = True
number(p) = [next]
Line 1,207 ⟶ 1,205:
End If
' Backtrack for more solutions.
used(
number(p) = 0
p -= 1
Line 1,217 ⟶ 1,214:
Else
' Can't find a number for this position, backtrack.
used(
number(p) = 0
p -= 1
|