На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. К этой записи дописываются справа ещё два разряда по следующему правилу:
а) складываются все цифры двоичной записи, и остаток от деления суммы
б) над этой записью производятся те же действия — справа дописывается остаток от деления суммы цифр
Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N) является двоичной записью искомого числа R.
Укажите такое наименьшее число N, для которого результат работы алгоритма больше 97. В ответе это число запишите в десятичной системе счисления.
Если изначально сумма разрядов была чётная, то в конец запишется 00, что эквивалентно
Если же сумма была нечётная, то запишется 10, что эквивалентно
В обоих случаях число получается чётным.
Посмотрим на чётные числа, превосходящие 97.
— на конце 10, но сумма остальных разрядов чётна, не подходит ни под один из случаев.
— на конце 00, но сумма остальных разрядов нечётна, не подходит.
— на конце 10, а сумма остальных разрядов нечётна. Число подходит под второй случай, значит, число, из которого оно было получено, равно
Ответ: 25.
Приведём другое решение на языке Python.
def f(s):
summa = 0
for i in range(len(s)):
summa += int(s[i])
return summa
for n in range(1, 100):
s = bin(n)[2:] # перевод в двоичную систему
s = str(s)
summa = f(s)
s = s + str(summa % 2)
summa = f(s)
s = s + str(summa % 2)
r = int(s, 2) # перевод в десятичную систему
if r > 97:
print(n)
break
Приведём другое решение Силина Николая на языке Python.
for n in range(0, 1000000):
r=bin(n)[2:]
r+= str(r.count('1')%2)
r+= str(r.count('1')%2)
if int(r,2)>97:
print (n)
break

