На вход алгоритма подаётся натуральное число . Алгоритм строит по нему новое число
следующим образом.
- Строится двоичная запись числа
.
-
К этой записи дописываются ещё два разряда по следующему правилу:
- cкладываются все цифры двоичной записи числа
, и остаток от деления суммы на
дописывается в конец числа (справа). Например, запись числа
преобразуется в запись
;
- над этой записью производятся те же действия — справа дописывается остаток от деления суммы цифр на
.
- cкладываются все цифры двоичной записи числа
Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа ) является двоичной записью искомого числа
.
Укажите такое наименьшее число , которое превышает
и может являться результатом работы этого алгоритма. В ответе это число запишите в десятичной системе счисления.
Аналитическое решение:
Заметим, что если число единиц в двоичной записи нечётное, то в первый раз допишется единица, а затем число единиц станет чётным, и во второй раз мы допишем ноль. Если же число единиц в двоичной записи чётное, то в первый раз мы допишем ноль, затем количество единиц не изменится, и мы снова допишем ноль. Таким образом, в любом случае последняя цифра числа — ноль. Напишем программу:
for i in range(1, 100):
s = bin(i)[2::]
a = 0
for j in range(len(s)):
a += int(s[j])
if a % 2 == 0:
s += ’00’
else:
s += ’10’
if int(s, 2) > 43:
print(int(s, 2))
break