Доказать гипотезу Сиракуз на диапазоне чисел. Гипотеза Сиракуз утверждает, что любое натуральное число сводится к единице в результате повторения следующих действий над самим числом и результатами этих действий.
Если число четное следует разделить его на 2.
Если нечетное, то умножить его на 3, прибавить 1 и разделить на 2.
Запросить нижнюю и верхнюю границы диапазона чисел.
Последовательно перебрать все числа от нижней до верхней границы включительно.
Вывести на экран само число.
Повторять до тех пор, пока число не будет сведено к единице:
если число четное, то разделить его на 2,
иначе умножить на 3, прибавить 1 и разделить на 2,
вывести полученное значение на экран.
Если гипотеза Сиракуз верна, то программа рано или поздно завершится и зацикливания не произойдет, т.к. все числа будут сведены к единице.
Pascal
var
n, i, a, b: word;
begin
readln(a,b);
for i:=a to b do begin
n := i;
write('-> ', n, ' ');
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;
end;
end.
a = int(input())
b = int(input())
while a<=b:
n = a
print('-> ',n, end=' ')
while n != 1:
if n%2 == 0:
n = n // 2
else:
n = (n*3 + 1) // 2
print(n, end=' ')
print()
a += 1
алг гипотеза Сиракуз
нач
цел n,i,a,b
ввод a,b
нц для i от a до b
n := i
вывод "-> ",n," "
нц пока n <> 1
если mod(n,2) = 0 то
n := div(n,2)
иначе
n := div(n*3+1,2)
все
вывод n, " "
кц
вывод нс
кц
кон
input a
input b
for i=a to b
n = i
print "-> " + n + " ";
while n <> 1
if n%2 = 0 then
n = n\2
else
n = (3*n + 1) \ 2
endif
print n + " ";
endwhile
print ""
next i
begin readln(a,b); for i:=a to b do begin n := i; write('-> ', n, ' '); 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; end; end.
алг гипотеза Сиракуз нач цел n,i,a,b ввод a,b нц для i от a до b n := i вывод "-> ",n," " нц пока n 1 если mod(n,2) = 0 то n := div(n,2) иначе n := div(n*3+1,2) все вывод n, " " кц вывод нс кц кон
input a input b for i=a to b n = i print "-> " + n + " "; while n 1 if n%2 = 0 then n = n\2 else n = (3*n + 1) \ 2 endif print n + " "; endwhile print "" next i