The Collatz Conjecture is a simple mathematical problem that still has no formal proof. So it’s an open problem.
This is how it works:
Choose any positive integer x.
While x > 0, do:
if x is even, divide it by 2 (x = x/2)
if x is odd, multiply it by 3 and add 1 (x = 3x + 1)
The Collatz Conjecture states that no matter what value of x you start with, the sequence will always reach x = 1
.
Example:
If x = 10
, you get the following sequence:
[10, 5, 16, 8, 4, 2, 1]
.
If x = 77
, you get the following collatz sequence:
[77, 232, 116, 58, 29, 88, 44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1]
.
In other words, it doesn’t matter the initial value you pick for x
,
you always end up going back to x = 1
.
A ruby implementation would look like this:
def collatz n
seq = [n]
until n == 1
n = (n.even?) ? (n / 2) : (3 * n + 1)
seq << n
end
seq
end
A Haskell implementation[1] could look like this:
chain :: (Integral a) => a -> [a]
chain 0 = error "Invalid!"
chain 1 = [1]
chain x
| even x = x:chain (x `div` 2)
| odd x = x:chain (x*3 + 1)
[1] Source: a gist that is not available anymore.
Did you like this article? Then you're gonna love these other ones: