Последовательность Коллатца (также называемая проблемой 3x + 1) - это то место, где вы начинаете с любого положительного целого числа, в этом примере мы будем использовать 10 и применим к нему следующий набор шагов:
if n is even:
Divide it by 2
if n is odd:
Multiply it by 3 and add 1
repeat until n = 1
10 - четное, поэтому мы делим на 2, чтобы получить 5. 5 - нечетное, поэтому мы умножаем на 3 и добавляем 1, чтобы получить 16. 16 - четное, поэтому разрежем его пополам, чтобы получить 8. Половина из 8 - это 4, половина из 4 - это 2, а половина из 2 - 1. Поскольку нам потребовалось 6 шагов, мы говорим, что 10 имеет тормозной путь 6.
Число Super Collatz - это число, у которого тормозной путь больше, чем тормозной путь каждого числа, меньшего его. Например, 6 - это число Super Collatz, поскольку 6 имеет тормозной путь 8, 5 имеет тормозной путь 5, 4 имеет 2, 3 имеет 7, 2 имеет 1 и 1 имеет 0. ( A006877 в OEIS) Вы должны возьмите число n в качестве входных данных и выведите все числа Super Collatz до n .
правила
Полная программа или функция приемлемы.
Вы не можете предварительно вычислить или жестко закодировать последовательность Super Collatz.
Вы можете принять участие в любом разумном формате.
Вывод может быть возвращен в виде списка из функции, или распечатан в STDOUT или файл. Какой бы самый удобный.
Неправильные входные данные (не числа, десятичные числа, отрицательные числа и т. Д.) Приводят к неопределенному поведению.
Образец негольфированного питона
def collatzDist(n):
if n == 1:
return 0
if n % 2 == 0:
return 1 + collatzDist(n / 2)
return 1 + collatzDist((n * 3) + 1)
n = input()
max = -1
superCollatz = []
for i in range(1, n + 1):
dist = collatzDist(i)
if dist > max:
superCollatz.append(i)
max = dist
print superCollatz
Образец ввода-вывода:
#in #out
4 --> 1, 2, 3
50 --> 1, 2, 3, 6, 7, 9, 18, 25, 27
0 --> invalid
10000 --> 1, 2, 3, 6, 7, 9, 18, 25, 27, 54, 73, 97, 129, 171, 231, 313, 327, 649, 703, 871, 1161, 2223, 2463, 2919, 3711, 6171
Также вот первые 44 номера Super Collatz:
1, 2, 3, 6, 7, 9, 18, 25, 27, 54, 73, 97, 129, 171, 231, 313, 327, 649, 703, 871, 1161, 2223, 2463, 2919, 3711, 6171, 10971, 13255, 17647, 23529, 26623, 34239, 35655, 52527, 77031, 106239, 142587, 156159, 216367, 230631, 410011, 511935, 626331, 837799