Поиск по разделу «Программирование»

Удивительная последовательность

Pas.0008. Последовательность натуральных чисел задается следующим образом: \( a_1 \) — любое натуральное число, большее \( 1 \), при \(
k > 1 \): \[
a_{k+1} =
\begin {cases}
\dfrac {a_k} 2, & \mbox {если } a_k \mbox { — четное,}
\\
3 a_k + 1, & \mbox {иначе.}
\end {cases}
\tag {$\ast$} \] Последовательность «заканчивается», если очередной элемент равен \( 1 \).
Удивительный факт! При любом выборе \( a_1 > 1 \) последовательность «завершается» (это проверено с помощью компьютеров для о-о-очень больших значений \( a_1\)). Также до сих пор не доказано утверждение, что не существует такого числа \( a_1\), для которого последовательность вида ($\ast$) «не заканчивается»!
Требуется написать программу, которая для заданного \( a_1 \) выводит все элементы последовательности, т.е. последним элементом должно быть число \( 1 \).
Решение.
program AmazingNumberSequence;

var

    N : integer = 2016;
    c : integer = 0;

begin

    while N > 1 do
    begin

        write(N, ', ');

        if N mod 2 = 0 then
            N := N div 2
        else
            N := 3 * N + 1;

        c := c + 1;

        if (c mod 10 = 0) and (N <> 1) then
            writeln;

    end;

    write('1.');

end.
Консоль.
2016, 1008, 504, 252, 126, 63, 190, 95, 286, 143, 
430, 215, 646, 323, 970, 485, 1456, 728, 364, 182, 
91, 274, 137, 412, 206, 103, 310, 155, 466, 233, 
700, 350, 175, 526, 263, 790, 395, 1186, 593, 1780, 
890, 445, 1336, 668, 334, 167, 502, 251, 754, 377, 
1132, 566, 283, 850, 425, 1276, 638, 319, 958, 479, 
1438, 719, 2158, 1079, 3238, 1619, 4858, 2429, 7288, 3644, 
1822, 911, 2734, 1367, 4102, 2051, 6154, 3077, 9232, 4616, 
2308, 1154, 577, 1732, 866, 433, 1300, 650, 325, 976, 
488, 244, 122, 61, 184, 92, 46, 23, 70, 35, 
106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 
4, 2, 1.
Дополнительное задание.
Включите в программу подсчет и вывод длины последовательности.