Проверка гипотезы Сиракуз
Возьмем любое натуральное число. Если оно четное - разделим его пополам, если нечетное - умножим на 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|