Проверка гипотезы Сиракуз | Язык Паскаль

Проверка гипотезы Сиракуз

Возьмем любое натуральное число. Если оно четное - разделим его пополам, если нечетное - умножим на 3, прибавим 1 и разделим пополам. Повторим эти действия с вновь полученным числом. Гипотеза гласит, что независимо от выбора первого числа рано или поздно мы получим 1.

Проверим гипотезу Сиракуз для всех чисел от 20 до 30.

В цикле будем выполнять над числом действия: если оно четно, то делить на два, иначе - умножать на 3, прибавлять единицу и делить на 2. Эти действия будем выполнять до тех пор, пока число не станет равным единице. Если гипотеза Сиракуз не верна, и найдется такое число, которое не станет равным 1, то произойдет зацикливание.

Программа на языке Паскаль:

var
    n, i: word;
 
begin
    for i:=20 to 30 do begin
        n := i;
        while n <> 1 do begin
            if (n mod 2) = 0 then
                n := n div 2
            else
                n := (3*n + 1) div 2;
            write(' |',n,'|');
        end;
        writeln; writeln;
 
    end;
 
end.

Вывод программы:

 |10| |5| |8| |4| |2| |1|

 |32| |16| |8| |4| |2| |1|

 |11| |17| |26| |13| |20| |10| |5| |8| |4| |2| |1|

 |35| |53| |80| |40| |20| |10| |5| |8| |4| |2| |1|

 |12| |6| |3| |5| |8| |4| |2| |1|

 |38| |19| |29| |44| |22| |11| |17| |26| |13| |20| |10| |5| |8| |4| |2| |1|

 |13| |20| |10| |5| |8| |4| |2| |1|

 |41| |62| |31| |47| |71| |107| |161| |242| |121| |182| |91| |137| |206| 
|103| |155| |233| |350| |175| |263| |395| |593| |890| |445| |668| |334| 
|167| |251| |377| |566| |283| |425| |638| |319| |479| |719| |1079| |1619| 
|2429| |3644| |1822| |911| |1367| |2051| |3077| |4616| |2308| |1154|
|577| |866| |433| |650| |325| |488| |244| |122| |61| |92| |46| |23| |35| 
|53| |80| |40| |20| |10| |5| |8| |4| |2| |1|

 |14| |7| |11| |17| |26| |13| |20| |10| |5| |8| |4| |2| |1|

 |44| |22| |11| |17| |26| |13| |20| |10| |5| |8| |4| |2| |1|

 |15| |23| |35| |53| |80| |40| |20| |10| |5| |8| |4| |2| |1|