Found the longest Collatz chain: 837799
This commit is contained in:
64
14/main.py
Normal file
64
14/main.py
Normal file
@@ -0,0 +1,64 @@
|
||||
import os
|
||||
import math
|
||||
import numpy as np
|
||||
|
||||
|
||||
# Given the following sequence, find the longest chain that ends with 1 and starts with some number under a million
|
||||
|
||||
# n -> n/2 | n is even
|
||||
# n -> 3n + 1 | n is odd
|
||||
|
||||
def next(n):
|
||||
if n % 2 == 0:
|
||||
return int(n/2)
|
||||
else:
|
||||
return (3*n + 1)
|
||||
|
||||
def sequence(n):
|
||||
res = [n]
|
||||
|
||||
while res[-1] != 1:
|
||||
res.append(next(res[-1]))
|
||||
|
||||
return res
|
||||
|
||||
|
||||
def getLongestSequence(n):
|
||||
seqLengths = [0] * n
|
||||
seqLengths[0] = 1
|
||||
|
||||
for x in range(1, n):
|
||||
i = x + 1
|
||||
l = 1
|
||||
|
||||
while True:
|
||||
if i == 1:
|
||||
break
|
||||
elif i < n + 1 and seqLengths[i - 1] > 0:
|
||||
l = l + seqLengths[i - 1] - 1
|
||||
break
|
||||
else:
|
||||
l = l + 1
|
||||
i = next(i)
|
||||
|
||||
seqLengths[x] = l
|
||||
print(x + 1, l)
|
||||
|
||||
return seqLengths
|
||||
|
||||
|
||||
def main():
|
||||
print("Hello, this is Patrick")
|
||||
|
||||
t = getLongestSequence(1000000)
|
||||
|
||||
m = t[0]
|
||||
j = 0
|
||||
for i in range(len(t)):
|
||||
if t[i] > m:
|
||||
m = t[i]
|
||||
j = i
|
||||
print("Max", j + 1, m)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user