Added Problem 14
This commit is contained in:
parent
7044fafe95
commit
20d1667a93
40
Problem_14.py
Normal file
40
Problem_14.py
Normal file
|
@ -0,0 +1,40 @@
|
|||
######################################################################
|
||||
# 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 → 1
|
||||
# It 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.
|
||||
######################################################################
|
||||
|
||||
longestChain = []
|
||||
currentChain = []
|
||||
|
||||
for i in range(2, 1000000):
|
||||
if i not in longestChain:
|
||||
print(i)
|
||||
currentChain.clear()
|
||||
n = i
|
||||
currentChain.append(n)
|
||||
|
||||
while n != 1:
|
||||
if n % 2 == 0: # even
|
||||
n /= 2
|
||||
else:
|
||||
n = 3*n + 1
|
||||
|
||||
currentChain.append(n)
|
||||
|
||||
if len(currentChain) > len(longestChain):
|
||||
longestChain = currentChain.copy()
|
||||
|
||||
print(longestChain[0])
|
||||
# Solution: 837799
|
Loading…
Reference in a new issue