User:Klever: Difference between revisions

no edit summary
No edit summary
Line 163:
glossy
knotty
</pre>
 
==[[Hailstone sequence]]==
<lang>
Public Function Hailstone(aNumber As Long, Optional Printit As Boolean = False) As Long
'return length of Hailstone sequence for aNumber
'if optional argument Printit is true, print the sequence in the Immediate window
Dim nSteps As Long
Const NumbersPerLine = 10 'when printing, start a new line after this much numbers
 
nSteps = 1
If Printit Then Debug.Print aNumber,
While aNumber <> 1
If aNumber Mod 2 = 0 Then aNumber = aNumber / 2 Else aNumber = 3 * aNumber + 1
nSteps = nSteps + 1
If Printit Then Debug.Print aNumber,
If Printit And (nSteps Mod NumbersPerLine = 0) Then Debug.Print
Wend
If Printit Then Debug.Print "(Length:"; nSteps; ")"
Hailstone = nSteps
End Function
 
Public Sub HailstoneTest()
Dim theNumber As Long
Dim theSequenceLength As Long
Dim SeqLength As Long
 
'find and print the Hailstone sequence for 27 (note: the whole sequence, not just the first four and last four items!)
Debug.Print "Hailstone sequence for 27:"
theNumber = Hailstone(27, True)
 
'find the longest Hailstone sequence for numbers less than 100000.
theSequenceLength = 0
For i = 2 To 99999
SeqLength = Hailstone(CLng(i))
If SeqLength > theSequenceLength Then
theNumber = i
theSequenceLength = SeqLength
End If
Next i
Debug.Print theNumber; "has the longest sequence ("; theSequenceLength; ")."
End Sub
</lang>
 
Output:
<pre>
HailstoneTest
Hailstone sequence for 27:
27 82 41 124 62 31 94 47 142 71
214 107 322 161 484 242 121 364 182 91
274 137 412 206 103 310 155 466 233 700
350 175 526 263 790 395 1186 593 1780 890
445 1336 668 334 167 502 251 754 377 1132
566 283 850 425 1276 638 319 958 479 1438
719 2158 1079 3238 1619 4858 2429 7288 3644 1822
911 2734 1367 4102 2051 6154 3077 9232 4616 2308
1154 577 1732 866 433 1300 650 325 976 488
244 122 61 184 92 46 23 70 35 106
53 160 80 40 20 10 5 16 8 4
2 1 (Length: 112 )
77031 has the longest sequence ( 351 ).
</pre>
Anonymous user