ЕГЭ по информатике · задание 5

Алгоритм с двоичной записью: найти N или R

Алгоритм переводит число N в двоичную запись, дописывает к ней цифры по правилу и получает число R. Нужно найти N или R с заданным свойством.

Что нужно знать

  • Перевод в двоичную: bin(n)[2:], обратно: int(s, 2).
  • Дописать цифры в конец — это сложить строки: s + '01'.
  • Количество единиц: s.count('1').

Как решать

  1. Записать алгоритм функцией R(n) на Python, строго по условию.
  2. Проверить функцию на примерах из условия.
  3. Перебрать N и выбрать нужное: минимальное, максимальное или минимальное R.

Типичные ошибки

  • Пропустить проверку на примерах — ошибка в правиле даёт неверный ответ.
  • Перепутать «не меньшее» (≥) и «большее» (>).
  • Ответить N, когда спрашивают R, и наоборот.

Разобранные варианты

Сначала реши сам, потом открой разбор. В каждом разборе есть программа на Python.

Вариант 1

минимальное N

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если число N делится на 3, то к этой записи дописываются её три последние двоичные цифры;
б) если число N на 3 не делится, то остаток от деления умножается на 3, переводится в двоичную запись и дописывается в конец числа.
Полученная таким образом запись является двоичной записью искомого числа R.
3. Результат переводится в десятичную систему и выводится на экран.
Например, 2810 = 111002 → 11100112 = 11510, а 1110 = 10112 → 10111102 = 9410.
Укажите минимальное число N, после обработки которого с помощью этого алгоритма получается число R, не меньшее 435.

Разбор

Шаг 1. Как растёт R. Алгоритм дописывает к записи N несколько цифр, поэтому R примерно в 4–8 раз больше N и растёт вместе с N, но не строго: дописанные цифры зависят от правила.

Шаг 2. Перебираем N рядом с границей и ищем R ≥ 435:

NN в двоичнойR в двоичнойR
51110011110011011411
5211010011010011211
53110101110101110430
54110110110110110438
5511011111011111223
56111000111000110454
57111001111001001457

Шаг 3. Вручную легко ошибиться на краю, поэтому надёжнее перебрать все N программой.

Ответ: 54

Решение на Python.

def R(n):
    s = bin(n)[2:]
    if n % 3 == 0:
        s = s + s[-3:]
    else:
        s = s + bin(n % 3 * 3)[2:]
    return int(s, 2)

for n in range(4, 100000):
    if R(n) >= 435:
        print(n)
        break

Вариант 2

минимальное N

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) к этой записи дописывается справа бит чётности: 0, если в двоичной записи числа N чётное число единиц, и 1, если нечётное;
б) к полученной записи справа дописывается ещё один бит чётности, вычисленный уже для новой записи.
Полученная таким образом запись является двоичной записью искомого числа R.
3. Результат переводится в десятичную систему и выводится на экран.
Например, 2810 = 111002 → 11100102 = 11410, а 2110 = 101012 → 10101102 = 8610.
Укажите минимальное число N, после обработки которого с помощью этого алгоритма получается число R, большее 763.

Разбор

Шаг 1. Как растёт R. Алгоритм дописывает к записи N несколько цифр, поэтому R примерно в 4–8 раз больше N и растёт вместе с N, но не строго: дописанные цифры зависят от правила.

Шаг 2. Перебираем N рядом с границей и ищем R > 763:

NN в двоичнойR в двоичнойR
188101111001011110010754
189101111011011110100756
190101111101011111000760
191101111111011111110766
192110000001100000000768
193110000011100000110774
194110000101100001010778

Шаг 3. Вручную легко ошибиться на краю, поэтому надёжнее перебрать все N программой.

Ответ: 191

Решение на Python.

def R(n):
    s = bin(n)[2:]
    s = s + str(s.count('1') % 2)
    s = s + str(s.count('1') % 2)
    return int(s, 2)

for n in range(1, 100000):
    if R(n) > 763:
        print(n)
        break

Вариант 3

минимальное N

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если количество единиц в двоичной записи чётное, то в конец записи дописывается 0, а в начало — 10;
б) если количество единиц нечётное, то в конец записи дописывается 1, а в начало — 11.
Полученная таким образом запись является двоичной записью искомого числа R.
3. Результат переводится в десятичную систему и выводится на экран.
Например, 2610 = 110102 → 111101012 = 24510, а 1610 = 100002 → 111000012 = 22510.
Укажите минимальное число N, после обработки которого с помощью этого алгоритма получается число R, не меньшее 596.

Разбор

Шаг 1. Как растёт R. Алгоритм дописывает к записи N несколько цифр, поэтому R примерно в 4–8 раз больше N и растёт вместе с N, но не строго: дописанные цифры зависят от правила.

Шаг 2. Перебираем N рядом с границей и ищем R ≥ 596:

NN в двоичнойR в двоичнойR
61111101111111011507
62111110111111101509
63111111101111110382
6410000001110000001897
6510000011010000010642
6610000101010000100644
6710000111110000111903

Шаг 3. Вручную легко ошибиться на краю, поэтому надёжнее перебрать все N программой.

Ответ: 64

Решение на Python.

def R(n):
    s = bin(n)[2:]
    if s.count('1') % 2 == 0:
        s = '10' + s + '0'
    else:
        s = '11' + s + '1'
    return int(s, 2)

for n in range(1, 100000):
    if R(n) >= 596:
        print(n)
        break

Вариант 4

минимальное R

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если число N делится на 4, то к этой записи дописываются её две последние двоичные цифры;
б) если число N на 4 не делится, то остаток от деления на 4 умножается на 2, переводится в двоичную запись и дописывается в конец числа.
Полученная таким образом запись является двоичной записью искомого числа R.
3. Результат переводится в десятичную систему и выводится на экран.
Например, 710 = 1112 → 1111102 = 6210, а 1810 = 100102 → 100101002 = 14810.
Укажите минимальное число R, которое превышает число 1154 и может являться результатом работы данного алгоритма. В ответе это число запишите в десятичной системе счисления.

Разбор

Шаг 1. Как растёт R. Алгоритм дописывает к записи N несколько цифр, поэтому R примерно в 4–8 раз больше N и растёт вместе с N, но не строго: дописанные цифры зависят от правила.

Шаг 2. Перебираем N рядом с границей и ищем R > 1154:

NN в двоичнойR в двоичнойR
13910001011100010111101118
280100011000100011000001120
281100011001100011001101126
284100011100100011100001136
14210001110100011101001140
285100011101100011101101142
14310001111100011111101150
288100100000100100000001152

Шаг 3. Вручную легко ошибиться на краю, поэтому надёжнее перебрать все N программой.

Ответ: 1158

Решение на Python.

def R(n):
    s = bin(n)[2:]
    if n % 4 == 0:
        s = s + s[-2:]
    else:
        s = s + bin(n % 4 * 2)[2:]
    return int(s, 2)

print(min(R(n) for n in range(4, 100000) if R(n) > 1154))

Вариант 5

минимальное N

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если число N чётное, то в конец записи дописываются две её первые цифры;
б) если число N нечётное, то в конец записи дописывается 1, а затем ещё один бит: остаток от деления количества единиц в новой записи на 2.
Полученная таким образом запись является двоичной записью искомого числа R.
3. Результат переводится в десятичную систему и выводится на экран.
Например, 1310 = 11012 → 1101102 = 5410, а 410 = 1002 → 100102 = 1810.
Укажите минимальное число N, после обработки которого с помощью этого алгоритма получается число R, не меньшее 614.

Разбор

Шаг 1. Как растёт R. Алгоритм дописывает к записи N несколько цифр, поэтому R примерно в 4–8 раз больше N и растёт вместе с N, но не строго: дописанные цифры зависят от правила.

Шаг 2. Перебираем N рядом с границей и ищем R ≥ 614:

NN в двоичнойR в двоичнойR
150100101101001011010602
151100101111001011110606
152100110001001100010610
153100110011001100111615
154100110101001101010618
155100110111001101110622
156100111001001110010626

Шаг 3. Вручную легко ошибиться на краю, поэтому надёжнее перебрать все N программой.

Ответ: 153

Решение на Python.

def R(n):
    s = bin(n)[2:]
    if n % 2 == 0:
        s = s + s[:2]
    else:
        s = s + '1'
        s = s + str(s.count('1') % 2)
    return int(s, 2)

for n in range(2, 100000):
    if R(n) >= 614:
        print(n)
        break

Вариант 6

минимальное R

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) к этой записи дописывается справа бит чётности: 0, если в двоичной записи числа N чётное число единиц, и 1, если нечётное;
б) к полученной записи справа дописывается ещё один бит чётности, вычисленный уже для новой записи.
Полученная таким образом запись является двоичной записью искомого числа R.
3. Результат переводится в десятичную систему и выводится на экран.
Например, 710 = 1112 → 111102 = 3010, а 2310 = 101112 → 10111002 = 9210.
Укажите минимальное число R, которое превышает число 1107 и может являться результатом работы данного алгоритма. В ответе это число запишите в десятичной системе счисления.

Разбор

Шаг 1. Как растёт R. Алгоритм дописывает к записи N несколько цифр, поэтому R примерно в 4–8 раз больше N и растёт вместе с N, но не строго: дописанные цифры зависят от правила.

Шаг 2. Перебираем N рядом с границей и ищем R > 1107:

NN в двоичнойR в двоичнойR
267100001011100001011001068
268100001100100001100101074
269100001101100001101001076
270100001110100001110001080
271100001111100001111101086
272100010000100010000001088
273100010001100010001101094
274100010010100010010101098

Шаг 3. Вручную легко ошибиться на краю, поэтому надёжнее перебрать все N программой.

Ответ: 1108

Решение на Python.

def R(n):
    s = bin(n)[2:]
    s = s + str(s.count('1') % 2)
    s = s + str(s.count('1') % 2)
    return int(s, 2)

print(min(R(n) for n in range(1, 100000) if R(n) > 1107))

Вариант 7

максимальное N

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если число N делится на 3, то к этой записи дописываются её три последние двоичные цифры;
б) если число N на 3 не делится, то остаток от деления умножается на 3, переводится в двоичную запись и дописывается в конец числа.
Полученная таким образом запись является двоичной записью искомого числа R.
3. Результат переводится в десятичную систему и выводится на экран.
Например, 1210 = 11002 → 11001002 = 10010, а 910 = 10012 → 10010012 = 7310.
Укажите максимальное число N, после обработки которого с помощью этого алгоритма получается число R, меньшее 80.

Разбор

Шаг 1. Как растёт R. Алгоритм дописывает к записи N несколько цифр, поэтому R примерно в 4–8 раз больше N и растёт вместе с N, но не строго: дописанные цифры зависят от правила.

Шаг 2. Перебираем N рядом с границей и ищем R < 80:

NN в двоичнойR в двоичнойR
1610000100001167
171000110001110142
181001010010010146
1910011100111179
201010010100110166
211010110101101173
2210110101101191

Шаг 3. Вручную легко ошибиться на краю, поэтому надёжнее перебрать все N программой.

Ответ: 19

Решение на Python.

def R(n):
    s = bin(n)[2:]
    if n % 3 == 0:
        s = s + s[-3:]
    else:
        s = s + bin(n % 3 * 3)[2:]
    return int(s, 2)

print(max(n for n in range(4, 100000) if R(n) < 80))

Вариант 8

минимальное R

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если количество единиц в двоичной записи чётное, то в конец записи дописывается 0, а в начало — 10;
б) если количество единиц нечётное, то в конец записи дописывается 1, а в начало — 11.
Полученная таким образом запись является двоичной записью искомого числа R.
3. Результат переводится в десятичную систему и выводится на экран.
Например, 2610 = 110102 → 111101012 = 24510, а 810 = 10002 → 11100012 = 11310.
Укажите минимальное число R, которое превышает число 732 и может являться результатом работы данного алгоритма. В ответе это число запишите в десятичной системе счисления.

Разбор

Шаг 1. Как растёт R. Алгоритм дописывает к записи N несколько цифр, поэтому R примерно в 4–8 раз больше N и растёт вместе с N, но не строго: дописанные цифры зависят от правила.

Шаг 2. Перебираем N рядом с границей и ищем R > 732:

NN в двоичнойR в двоичнойR
9210111001010111000696
9510111111010111110702
9611000001011000000704
9911000111011000110710
10111001011011001010714
10211001101011001100716
10511010011011010010722
10611010101011010100724

Шаг 3. Вручную легко ошибиться на краю, поэтому надёжнее перебрать все N программой.

Ответ: 734

Решение на Python.

def R(n):
    s = bin(n)[2:]
    if s.count('1') % 2 == 0:
        s = '10' + s + '0'
    else:
        s = '11' + s + '1'
    return int(s, 2)

print(min(R(n) for n in range(1, 100000) if R(n) > 732))

Вариант 9

минимальное N

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если число N делится на 4, то к этой записи дописываются её две последние двоичные цифры;
б) если число N на 4 не делится, то остаток от деления на 4 умножается на 2, переводится в двоичную запись и дописывается в конец числа.
Полученная таким образом запись является двоичной записью искомого числа R.
3. Результат переводится в десятичную систему и выводится на экран.
Например, 1310 = 11012 → 1101102 = 5410, а 2410 = 110002 → 11000002 = 9610.
Укажите минимальное число N, после обработки которого с помощью этого алгоритма получается число R, не меньшее 368.

Разбор

Шаг 1. Как растёт R. Алгоритм дописывает к записи N несколько цифр, поэтому R примерно в 4–8 раз больше N и растёт вместе с N, но не строго: дописанные цифры зависят от правила.

Шаг 2. Перебираем N рядом с границей и ищем R ≥ 368:

NN в двоичнойR в двоичнойR
43101011101011110350
4410110010110000176
4510110110110110182
46101110101110100372
47101111101111110382
4811000011000000192
4911000111000110198

Шаг 3. Вручную легко ошибиться на краю, поэтому надёжнее перебрать все N программой.

Ответ: 46

Решение на Python.

def R(n):
    s = bin(n)[2:]
    if n % 4 == 0:
        s = s + s[-2:]
    else:
        s = s + bin(n % 4 * 2)[2:]
    return int(s, 2)

for n in range(4, 100000):
    if R(n) >= 368:
        print(n)
        break

Вариант 10

максимальное N

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если число N чётное, то в конец записи дописываются две её первые цифры;
б) если число N нечётное, то в конец записи дописывается 1, а затем ещё один бит: остаток от деления количества единиц в новой записи на 2.
Полученная таким образом запись является двоичной записью искомого числа R.
3. Результат переводится в десятичную систему и выводится на экран.
Например, 910 = 10012 → 1001112 = 3910, а 810 = 10002 → 1000102 = 3410.
Укажите максимальное число N, после обработки которого с помощью этого алгоритма получается число R, меньшее 476.

Разбор

Шаг 1. Как растёт R. Алгоритм дописывает к записи N несколько цифр, поэтому R примерно в 4–8 раз больше N и растёт вместе с N, но не строго: дописанные цифры зависят от правила.

Шаг 2. Перебираем N рядом с границей и ищем R < 476:

NN в двоичнойR в двоичнойR
1151110011111001110462
1161110100111010011467
1171110101111010110470
1181110110111011011475
1191110111111011111479
1201111000111100011483
1211111001111100110486

Шаг 3. Вручную легко ошибиться на краю, поэтому надёжнее перебрать все N программой.

Ответ: 118

Решение на Python.

def R(n):
    s = bin(n)[2:]
    if n % 2 == 0:
        s = s + s[:2]
    else:
        s = s + '1'
        s = s + str(s.count('1') % 2)
    return int(s, 2)

print(max(n for n in range(2, 100000) if R(n) < 476))

Для самостоятельного решения

Варианты 11–15 без разборов. Ответ можно проверить кнопкой.

Вариант 11

минимальное R

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если число N делится на 3, то к этой записи дописываются её три последние двоичные цифры;
б) если число N на 3 не делится, то остаток от деления умножается на 3, переводится в двоичную запись и дописывается в конец числа.
Полученная таким образом запись является двоичной записью искомого числа R.
3. Результат переводится в десятичную систему и выводится на экран.
Например, 2710 = 110112 → 110110112 = 21910, а 2110 = 101012 → 101011012 = 17310.
Укажите минимальное число R, которое превышает число 1105 и может являться результатом работы данного алгоритма. В ответе это число запишите в десятичной системе счисления.

Вариант 12

максимальное N

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) к этой записи дописывается справа бит чётности: 0, если в двоичной записи числа N чётное число единиц, и 1, если нечётное;
б) к полученной записи справа дописывается ещё один бит чётности, вычисленный уже для новой записи.
Полученная таким образом запись является двоичной записью искомого числа R.
3. Результат переводится в десятичную систему и выводится на экран.
Например, 1710 = 100012 → 10001002 = 6810, а 2710 = 110112 → 11011002 = 10810.
Укажите максимальное число N, после обработки которого с помощью этого алгоритма получается число R, меньшее 756.

Вариант 13

минимальное N

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если количество единиц в двоичной записи чётное, то в конец записи дописывается 0, а в начало — 10;
б) если количество единиц нечётное, то в конец записи дописывается 1, а в начало — 11.
Полученная таким образом запись является двоичной записью искомого числа R.
3. Результат переводится в десятичную систему и выводится на экран.
Например, 1810 = 100102 → 101001002 = 16410, а 2110 = 101012 → 111010112 = 23510.
Укажите минимальное число N, после обработки которого с помощью этого алгоритма получается число R, большее 398.

Вариант 14

максимальное N

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если число N делится на 4, то к этой записи дописываются её две последние двоичные цифры;
б) если число N на 4 не делится, то остаток от деления на 4 умножается на 2, переводится в двоичную запись и дописывается в конец числа.
Полученная таким образом запись является двоичной записью искомого числа R.
3. Результат переводится в десятичную систему и выводится на экран.
Например, 1010 = 10102 → 10101002 = 8410, а 710 = 1112 → 1111102 = 6210.
Укажите максимальное число N, после обработки которого с помощью этого алгоритма получается число R, меньшее 707.

Вариант 15

минимальное R

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если число N чётное, то в конец записи дописываются две её первые цифры;
б) если число N нечётное, то в конец записи дописывается 1, а затем ещё один бит: остаток от деления количества единиц в новой записи на 2.
Полученная таким образом запись является двоичной записью искомого числа R.
3. Результат переводится в десятичную систему и выводится на экран.
Например, 1510 = 11112 → 1111112 = 6310, а 1010 = 10102 → 1010102 = 4210.
Укажите минимальное число R, которое превышает число 191 и может являться результатом работы данного алгоритма. В ответе это число запишите в десятичной системе счисления.