Prime triangle: Difference between revisions
→{{header|Visual Basic .NET}}: Slight Simplification
(→{{header|ALGOL 68}}: Slight simplification) |
(→{{header|Visual Basic .NET}}: Slight Simplification) |
||
Line 1,120:
Public Const maxNumber As Integer = 20 ' Largest number we will consider.
Dim prime(2 * maxNumber) As Boolean ' prime sieve.
Dim result As Integer = current + 2▼
' The numbers must alternate between even and odd in order for the sum to be prime.▼
If i Mod 2 = 0 And result = 2 Then▼
result = 3▼
End If▼
Do While result < n AndAlso (Not primePair(i, result) Or used(result))▼
result += 2▼
Loop▼
result = 0▼
End If▼
''' <returns>The number of possible arrangements of the integers for a row in the prime triangle.</returns>
Public Function countArrangements(ByVal n As Integer
If n < 2 Then ' No solutions for n < 2.
Return 0
ElseIf n < 4 Then
' For 2 and 3. there is only 1 solution: 1, 2 and 1, 2, 3.
Next
Console.Out.WriteLine()▼
End If▼
Return 1
Else
' 4 or more - must find the solutions.
Dim printSolution As Boolean = true
Dim used(n) As Boolean
Dim number(n) As Integer
' The triangle row must have 1 in the leftmost and n in the rightmost elements.
number(1) = 1▼
used(1) = True
number(n) = n
Line 1,163 ⟶ 1,148:
Dim count As Integer = 0
Dim p As Integer = 2
Do While p
Dim
Dim
▲ Loop
▲ End If
If p = n - 1 Then
' We are at the final number before n.
' Found a solution.▼
For i As Integer = 1 To n - 2▼
Console.Out.Write(number(i).ToString.PadLeft(3))▼
Next i▼
Console.Out.WriteLine([next].ToString.PadLeft(3) & n.ToString.PadLeft(3))▼
End If▼
▲ End If
▲ End If
' There will be a further backtrack as next is 0 ( there could only be one possible number at p - 1 ).
End If
If [next] <> 0 Then
' have a/another number that can appear at p.
used(
used([next]) = True
number(p) = [next]
p +=
▲ p += 1
▲ number(p) = 0
▲ ' Found a solution.
▲ If count = 1 And printSolution Then
▲ For i As Integer = 1 To n
▲ Console.Out.Write(number(i).ToString.PadLeft(3))
▲ Next i
▲ Console.Out.WriteLine()
▲ End If
▲ ' Backtrack for more solutions.
▲ used(number(p)) = False
▲ p -= 1
ElseIf p <= 2 Then
' No more solutions.
p =
Else
' Can't find a number for this position, backtrack.
used(number(p)) = False
number(p) =
p -= 1
End If
Line 1,221 ⟶ 1,213:
End If
Next i
▲ For b As Integer = 2 To maxNumber
Dim arrangements(maxNumber) As Integer
For n As Integer = 2 To UBound(arrangements)
arrangements(n) = countArrangements(n
Next n
For n As Integer = 2 To UBound(arrangements)
|