Коллатц послідовність (також звана проблемою 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
Зразок IO:
#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