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