Визначимо Коллатц послідовність -like sз 4 позитивних цілих чисел:
nвихідне значенняd > 1дільникm > 1множникiприріст
(У початковій послідовності Колац d = 2 m = 3і i = 1.)
З огляду на ці цілі числа sбудуть створені наступним чином:
s(0) = n- якщо
k > 0іs(k-1) mod d = 0тодіs(k) = s(k-1) / d - якщо
k > 0іs(k-1) mod d != 0тодіs(k) = s(k-1) * m + i
Приклад послідовності з d = 2, m = 3, i = 5і n = 80буде s = 80, 40, 20, 10, 5, 20, 10, 5, 20, ....
Кожна послідовність або досягне більш високих значень, ніж будь-яка задана межа (тобто послідовність розбіжна), або потрапить у нескінченний цикл, якщо для деяких tта u( t!=u) s(t) = s(u)рівність буде істинною.
У нашій проблемі, якщо значення елемента послідовності більше 10^9або немає повторення елемента перед цим 1000елементом, послідовність вважається розбіжною.
Завдання
Вам слід написати програму або функцію, яка приймає натуральні цілі d mі iяк входи, і виводить всі різні типи закінчень послідовностей (нескінченних циклів і розбіжностей), які n = 1, 2, 3, ... 999, 1000можуть створювати вихідні значення .
Деталі введення
- Вхід - це рядок або список (або найближчий еквівалент вашій мові), що представляє (загальноприйнятим способом) три додатні цілі числа
d,mіiв цьому порядку.dіmє принаймні2. Жодне число не перевищує100.
Вихідні дані
Вихідна специфікація трохи словна. Варто спочатку перевірити приклади.
- Вам слід вивести стандартний вихід (або найближчу альтернативу) або повернути рядок.
- Якщо можлива розбіжна послідовність, перший рядок повинен бути
DIVERGENT. - Унікальне зображення циклу послідовності - це його обертання, де найменше число є останнім розділеним пробілами. Наприклад, якщо
s = 2 1 4 2 1 4 2 1цикл є4 2 1. - У кожному наступному рядку слід виводити кожен унікальний цикл точно один раз перед цим словом
LOOP. НапрLOOP 4 2 1 - Петлі повинні бути у порядку зростання щодо останнього елемента.
- Новий рядок не є обов'язковим.
Приклади:
Перші рядки - це входи, а наступні - поки порожні рядки не є вихідними.
2 3 1
LOOP 4 2 1
2 2 6
LOOP 8 4 2 1
LOOP 12 6 3
3 7 8
DIVERGENT
LOOP 15 5 43 309 103 729 243 81 27 9 3 1
LOOP 22 162 54 18 6 2
LOOP 36 12 4
3 9 1
DIVERGENT
6 9 9
DIVERGENT
LOOP 18 3 36 6 1
LOOP 27 252 42 7 72 12 2
LOOP 45 414 69 630 105 954 159 1440 240 40 369 3330 555 5004 834 139 1260 210 35 324 54 9 90 15 144 24 4
LOOP 81 738 123 1116 186 31 288 48 8
LOOP 99 900 150 25 234 39 360 60 10
LOOP 126 21 198 33 306 51 468 78 13
10 10 10
LOOP 20 2 30 3 40 4 50 5 60 6 70 7 80 8 90 9 100 10 1
93 91 92
DIVERGENT
LOOP 2185 198927 2139 23
LOOP 4278 46
Реалізація посилань у Python 3 на Ideone.
Це кодовий гольф, тому найкоротший виграш вступу.