На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если число N делится на 3, то к этой записи дописываются её три последние двоичные цифры;
б) если число N на 3 не делится, то остаток от деления умножается на 3, переводится в двоичную запись и дописывается в конец числа.
Полученная таким образом запись является двоичной записью искомого числа R.
3. Результат переводится в десятичную систему и выводится на экран.
Например, для исходного числа 1210 = 11002 результатом является число 11001002 = 10010, а для исходного числа 410 = 1002 это число 100112 = 1910.
Укажите минимальное число N, после обработки которого с помощью этого алгоритма получается число R, не меньшее 200.
Приведём решение на языке Python.
for n in range(4, 1000):
s = bin(n)[2:] # перевод в двоичную систему
if n % 3 == 0:
s += bin(n)[-3:]
else:
s += bin((n%3)*3)[2:]
r = int(s,2)
if r >= 200:
print(n)
break
Ответ: 26.
Приведём решение Александра Козлова на языке Python.
def f(n):
s = bin(n)[2:]
if n % 3 == 0:
s += s[-3:]
else:
s+= bin(n % 3 * 3)[2:]
return int(s, 2)
n = 4
while f(n) < 200:
n += 1
print(n)
Приведём решение Александра Козлова на языке Python.
for n in range(4, 1000):
bin_n = bin(n)[2:]
if n % 3 == 0:
suffix = bin_n[-3:]
else:
suffix = '11' if n % 3 == 1 else '110'
r = int(bin_n + suffix, 2)
if r >= 200:
print(n)
break

