In [1]:
def gen_collatz(n):
yield n
while n > 1:
if n % 2 == 0:
n /= 2
else:
n = 3 * n + 1
yield n
In [2]:
list(gen_collatz(13))
Out[2]:
In [3]:
len(list(gen_collatz(13)))
Out[3]:
In [4]:
def foo(n):
max_chain_len = 0
max_chain_n = 0
for i in xrange(1, n):
if len(list(gen_collatz(i))) > max_chain_len:
max_chain_len = len(list(gen_collatz(i)))
max_chain_n = i
return max_chain_n, max_chain_len
In [5]:
%time print foo(1000000)[0]