The following iterative sequence is defined for the set of positive integers:
n → n/2 (n is even)
n → 3n + 1 (n is odd)Using the rule above and starting with 13, we generate the following sequence:
13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1It can be seen that this sequence (starting at 13 and finishing at 1) contains 10 terms. Although it has not been proved yet (Collatz Problem), it is thought that all starting numbers finish at 1.
Which starting number, under one million, produces the longest chain?
NOTE: Once the chain starts the terms are allowed to go above one million.
Solution:
Function Prob014() As Long
Prob014 = 0
Dim NumWithLargestChain As Long = 0
Dim ChainCount As Long = 0
For StartNumber As Long = 999999 To 1 Step -1
Dim tmpNum As Long = StartNumber
Dim tmpCount As Long = 0
Do
tmpCount += 1
If tmpCount > ChainCount Then
ChainCount = tmpCount
NumWithLargestChain = StartNumber
End If
If tmpNum = 1 Then Exit Do
If tmpNum Mod 2 = 0 Then
tmpNum = tmpNum / 2
Else
tmpNum = (tmpNum * 3) + 1
End If
Loop
Next
Return NumWithLargestChain
End Function
Summary:
Thankfully, this was a lot easier than the previous problem I did. I skipped problem 12 and 13, but I’ll probably come back to them at some point. Problem 12 dealt with triangle numbers, which I’m not really familiar with. Problem 13 dealt with adding up a hundred 50-digit numbers, which seems like it would be easy, but I either would need a crazy-big numeric datatype or I’d need to come up with a new way to add the stuff up through some other fashion.