На уроке рассматривается 14 задание, решение и объяснение ЕГЭ по информатике
Объяснение заданий 14 ЕГЭ по информатике
14-е задание: «Операции в системах счисления»
Уровень сложности — повышенный,
Требуется использование специализированного программного обеспечения — нет,
Максимальный балл — 1,
Примерное время выполнения — 5 минут.
  
Проверяемые элементы содержания: Знание позиционных систем счисления
До ЕГЭ 2021 года — это было задание № 16 ЕГЭ
Типичные ошибки и рекомендации по их предотвращению:
"Основные ошибки связаны с невнимательностью при выполнении арифметических действий
в недесятичных системах счисления. Например, вычитания единицы в ситуации типа: 10100002 – 1" 
ФГБНУ "Федеральный институт педагогических измерений"
 
С основами темы можно ознакомиться в теории к заданию 1.
Перевод числа из любой системы счисления в десятичную
Чтобы перевести, например, 10045N, из системы счисления с основанием N в десятичную систему, нужно умножить значение каждой цифры на N в степени, равной разряду этой цифры:

Особенности при переводах в разные системы счисления
Некоторые правила, которые нужно знать, при работе с системами счисления:
- последняя цифра (крайняя справа) в записи числа в системе счисления с основанием N– представляет собой остаток от деления этого числа наN:
710 = 1112
7/2 = остаток 1
две крайние справа цифры числа в системе счисления с основанием N  – это остаток от деления этого числа на N², и так далее:
710 = 1112
112=310
7/22 = остаток 310 (112)
десятичное число 10N записывается как единица и N нулей:
 
тогда как десятичное число 2N> в двоичной системе записывается как единица и N нулей:

а десятичное число 3N записывается в троичной системе в виде единицы и N нулей:

можно сделать аналогичные выводы для любой системы счисления с основанием a; общее правило:
десятичное 10N-1 записывается как N девяток:

тогда как десятичное число 2N-1 в двоичной системе записывается как N единиц:

а десятичное число 3N-1 записывается в троичной системе как N двоек:

значит есть общее правило: число aN-1 в системе счисления с основанием a записывается как N старших цифр этой системы, то есть, цифр (a-1)
десятичное число 10N-10M = 10M * (10N-M – 1) записывается как N-M девяток, за которыми стоят M нулей:

тогда как десятичное число 2N – 2K при K < N в двоичной системе записывается как N – K единиц и K нулей:
 
то есть, существует общее правило:
Также следует знать, что верны равенства:
Решение заданий 14 ЕГЭ по информатике
Плейлист видеоразборов задания на YouTube: 
Задание демонстрационного варианта 2022 года ФИПИ
Определите наибольшее/наименьшее значение x, y
14_14: 
Операнды арифметического выражения записаны в системе счисления с основанием 
15.
82x19₁₅ – 6x073₁₅
В записи чисел переменной x обозначена неизвестная цифра из алфавита 15-ричной системы счисления. Определите наименьшее значение x, при котором значение данного арифметического выражения кратно 11. Для найденного значения x вычислите частное от деления значения арифметического выражения на 11 и укажите его в ответе в десятичной системе счисления. Основание системы счисления в ответе указывать не нужно.
 
✍ Решение:
✎ Решение с использованием программирования:
| PascalABC.net: | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
 | uses school;
begin
  foreach var x in '0123456789abcde' do
  begin
    var a := dec('82'+ x +'19', 15);
    var b :=dec('6' + x +'073', 15);
    var sum := a - b;
    if sum mod 11 = 0 then
    begin
      print(sum / 11);
      break;
    end
  end;
end. | 
 uses school;
begin
  foreach var x in '0123456789abcde' do
  begin
    var a := dec('82'+ x +'19', 15);
    var b :=dec('6' + x +'073', 15);
    var sum := a - b;
    if sum mod 11 = 0 then
    begin
      print(sum / 11);
      break;
    end
  end;
end. | 
| Python: | 1
2
3
4
 | for x in '0123456789ABCDE': 
    a=int(f'82{x}19',15)-int(f'6{x}073',15) 
    if a%11==0: 
        print(a//11) | 
 for x in '0123456789ABCDE': 
    a=int(f'82{x}19',15)-int(f'6{x}073',15) 
    if a%11==0: 
        print(a//11) | 
| С++: | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
 | #include <iostream> 
using namespace std; 
 
// Функция для преобразования 15-ричного числа в десятичное 
int convertToDecimal(const string& num, char x) { 
    int decimalValue = 0; 
    int base = 15; 
    int length = num.length(); 
 
    for (int i = 0; i < length; ++i) { 
        char digit = num[i]; 
        // Если встретили 'x', заменяем его на текущее значение 
        if (digit == 'x') { 
            digit = x; 
        } 
        if (digit >= '0' && digit <= '9') { 
            decimalValue = decimalValue * base + (digit - '0'); // Цифры от 0 до 9 
        } 
        else if (digit >= 'A' && digit <= 'E') { 
            decimalValue = decimalValue * base + (digit - 'A' + 10); // Цифры от 10 до 14 
        } 
    } 
    return decimalValue; 
} 
 
int main() { 
    // Переменная для хранения наименьшего значения x 
    char minX = -1; 
 
    // Перебираем все возможные значения x (0 до 14) 
    for (char x = '0'; x <= 'E'; ++x) { 
        int firstNum = convertToDecimal("82" + string(1, x) + "19", x); 
        int secondNum = convertToDecimal("6" + string(1, x) + "073", x); 
 
        // Вычисляем итоговое выражение 
        int result = firstNum - secondNum; 
 
        // Проверяем, делится ли результат на 11 
        if (result % 11 == 0) { 
            minX = x; // Сохраняем текущее значение x 
            cout << "Найдено x = " << x << ", "; 
            cout << "Результат = " << result << endl; 
 
            // Вычисляем частное от деления на 11 и выводим 
            cout << "Частное при x = " << x << " : " << (result / 11) << endl; 
            break; // Выходим из цикла, так как требуется наименьшее значение 
        } 
    } 
     if (minX == -1) { 
        cout << "Не найдено ни одно подходящее значение x." << endl; 
    } 
     return 0; 
} | 
 #include <iostream> 
using namespace std; 
 
// Функция для преобразования 15-ричного числа в десятичное 
int convertToDecimal(const string& num, char x) { 
    int decimalValue = 0; 
    int base = 15; 
    int length = num.length(); 
 
    for (int i = 0; i < length; ++i) { 
        char digit = num[i]; 
        // Если встретили 'x', заменяем его на текущее значение 
        if (digit == 'x') { 
            digit = x; 
        } 
        if (digit >= '0' && digit <= '9') { 
            decimalValue = decimalValue * base + (digit - '0'); // Цифры от 0 до 9 
        } 
        else if (digit >= 'A' && digit <= 'E') { 
            decimalValue = decimalValue * base + (digit - 'A' + 10); // Цифры от 10 до 14 
        } 
    } 
    return decimalValue; 
} 
 
int main() { 
    // Переменная для хранения наименьшего значения x 
    char minX = -1; 
 
    // Перебираем все возможные значения x (0 до 14) 
    for (char x = '0'; x <= 'E'; ++x) { 
        int firstNum = convertToDecimal("82" + string(1, x) + "19", x); 
        int secondNum = convertToDecimal("6" + string(1, x) + "073", x); 
 
        // Вычисляем итоговое выражение 
        int result = firstNum - secondNum; 
 
        // Проверяем, делится ли результат на 11 
        if (result % 11 == 0) { 
            minX = x; // Сохраняем текущее значение x 
            cout << "Найдено x = " << x << ", "; 
            cout << "Результат = " << result << endl; 
 
            // Вычисляем частное от деления на 11 и выводим 
            cout << "Частное при x = " << x << " : " << (result / 11) << endl; 
            break; // Выходим из цикла, так как требуется наименьшее значение 
        } 
    } 
     if (minX == -1) { 
        cout << "Не найдено ни одно подходящее значение x." << endl; 
    } 
     return 0; 
} | 
 
Ответ: 7806
 
14_15: 
Операнды арифметического выражения записаны в системах счисления с основаниями 15 и 17.
123x515 + 67y917
В записи чисел переменными x и y обозначены неизвестные цифры из алфавитов 15-ричной и 17-ричной систем счисления соответственно. Определите значения x, y, при которых значение данного арифметического выражения кратно 131. Для найденных значений x, y вычислите частное от деления значения арифметического выражения на 131 и укажите его в ответе в десятичной системе счисления. Если можно выбрать x, y не единственным образом, возьмите ту пару, в которой значение y меньше. Основание системы счисления в ответе указывать не нужно..
 
✍ Решение:
✎ Решение с использованием программирования:
| PascalABC.net: | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 | uses school;
 
begin
  foreach var x in '0123456789abcde' do
  begin
    foreach var y in '0123456789abcdefg' do
    begin
      var a := dec('123' + x + '5', 15);
      var b := dec('67' + y + '9', 17);
      var sum := a + b;
      if sum mod 131 = 0 then
      begin
        println($'{sum / 131} x={x} y={y}');
      end
    end;
  end;
end. | 
 uses school;
begin
  foreach var x in '0123456789abcde' do
  begin
    foreach var y in '0123456789abcdefg' do
    begin
      var a := dec('123' + x + '5', 15);
      var b := dec('67' + y + '9', 17);
      var sum := a + b;
      if sum mod 131 = 0 then
      begin
        println($'{sum / 131} x={x} y={y}');
      end
    end;
  end;
end. | 
| Python: | 1
2
3
4
5
6
 | for x in '0123456789ABCDE': 
    for y in '0123456789ABCDEFG': 
        a=int(f'123{x}5',15)+int(f'67{y}9',17) 
        if a%131==0: 
            print(a//131) 
            print(f' x={x} y={y}') | 
 for x in '0123456789ABCDE': 
    for y in '0123456789ABCDEFG': 
        a=int(f'123{x}5',15)+int(f'67{y}9',17) 
        if a%131==0: 
            print(a//131) 
            print(f' x={x} y={y}') | 
| С++: | 
 
Ответ: 686
 
Сколько цифр или сумма цифр
14_12: 
Значение арифметического выражения  
43∙7103 – 21∙757 + 98
записали в системе счисления с основанием 7.
Найдите сумму цифр получившегося числа и запишите её в ответе в десятичной системе счисления.
 
✍ Решение:
✎ Решение с использованием программирования:
| PascalABC.net, Решение 1: | 1
2
3
4
5
6
7
8
9
10
11
12
 | begin
  var x,s: Biginteger;
  x := 43*Biginteger.Pow(7, 103) - 21*Biginteger.Pow(7, 57) + 98;
  // в получившемся числе рассматриваем каждую цифру в 7-й системе сч.
  s:=0;
  while x > 0 do
  begin
    s:=s+ x mod 7; // добавляем цифру правого разряда
    x := x div 7; // убираем разряд числа в 7-й системе сч.
  end;
  println(s);
end. | 
 begin
  var x,s: Biginteger;
  x := 43*Biginteger.Pow(7, 103) - 21*Biginteger.Pow(7, 57) + 98;
  // в получившемся числе рассматриваем каждую цифру в 7-й системе сч.
  s:=0;
  while x > 0 do
  begin
    s:=s+ x mod 7; // добавляем цифру правого разряда
    x := x div 7; // убираем разряд числа в 7-й системе сч.
  end;
  println(s);
end. | 
| PascalABC.net, Решение 2: | 1
2
3
4
5
6
7
8
9
10
11
12
 | uses school;
 
begin
  var n: bigInteger;
  n := 43 * Biginteger.Pow(7, 103) - 21 * Biginteger.Pow(7, 57) + 98;
  print(n.ToString.ToBase(7).CountOf('1') +
    n.ToString.ToBase(7).CountOf('2') * 2 + 
    n.ToString.ToBase(7).CountOf('3') * 3 +
    n.ToString.ToBase(7).CountOf('4') * 4 +
    n.ToString.ToBase(7).CountOf('5') * 5 +
    n.ToString.ToBase(7).CountOf('6') * 6);
end. | 
 uses school;
begin
  var n: bigInteger;
  n := 43 * Biginteger.Pow(7, 103) - 21 * Biginteger.Pow(7, 57) + 98;
  print(n.ToString.ToBase(7).CountOf('1') +
    n.ToString.ToBase(7).CountOf('2') * 2 + 
    n.ToString.ToBase(7).CountOf('3') * 3 +
    n.ToString.ToBase(7).CountOf('4') * 4 +
    n.ToString.ToBase(7).CountOf('5') * 5 +
    n.ToString.ToBase(7).CountOf('6') * 6);
end. | 
| Python: | 1
2
3
4
5
6
7
 | x = 43*7**103 - 21*7**57 + 98
s = 0
# в получившемся числе рассматриваем каждую цифру в 7-й системе сч.
while x: 
    s+= x % 7 # добавляем цифру к сумматору
    x //= 7 # убираем разряд числа в 7-й системе сч.
print( s ) | 
 x = 43*7**103 - 21*7**57 + 98
s = 0
# в получившемся числе рассматриваем каждую цифру в 7-й системе сч.
while x: 
    s+= x % 7 # добавляем цифру к сумматору
    x //= 7 # убираем разряд числа в 7-й системе сч.
print( s ) | 
| С++: | 
 
Результат: 276
 
✍ Решение:
✎ Решение с использованием программирования:
| PascalABC.net, Решение 1: | 1
2
3
4
5
6
7
8
9
10
11
12
 | begin
  var k := 0;
  var x: Biginteger;
  x := Biginteger.Pow(2, 1024) + Biginteger.Pow(4, 64) - 64;
  // в получившемся числе рассматриваем каждую цифру в 2-й системе сч.
  while x > 0 do
  begin
    if x mod 2 = 1 then k += 1; // если цифра = 1, то считаем ее
    x := x div 2; // убираем разряд числа в 2-й системе сч.
  end;
  println(k);
end. | 
 begin
  var k := 0;
  var x: Biginteger;
  x := Biginteger.Pow(2, 1024) + Biginteger.Pow(4, 64) - 64;
  // в получившемся числе рассматриваем каждую цифру в 2-й системе сч.
  while x > 0 do
  begin
    if x mod 2 = 1 then k += 1; // если цифра = 1, то считаем ее
    x := x div 2; // убираем разряд числа в 2-й системе сч.
  end;
  println(k);
end. | 
| PascalABC.net, Решение 2: | 1
2
3
4
5
6
7
 | uses school;
 
begin
  var x: bigInteger;
  x := Biginteger.Pow(2, 1024) + Biginteger.Pow(4, 64) - 64;
  print(x.ToString.ToBase(2).CountOf('1'));
end. | 
 uses school;
begin
  var x: bigInteger;
  x := Biginteger.Pow(2, 1024) + Biginteger.Pow(4, 64) - 64;
  print(x.ToString.ToBase(2).CountOf('1'));
end. | 
| Python: | 1
2
3
4
5
6
7
8
 | x = 2**1024 + 4**64 - 64
k = 0
# в получившемся числе рассматриваем каждую цифру в 2-й системе сч.
while x: 
    if x % 2 == 1: # если цифра = 1, то считаем ее
        k += 1
    x //= 2 # убираем разряд числа в 2-й системе сч.
print( k ) | 
 x = 2**1024 + 4**64 - 64
k = 0
# в получившемся числе рассматриваем каждую цифру в 2-й системе сч.
while x: 
    if x % 2 == 1: # если цифра = 1, то считаем ее
        k += 1
    x //= 2 # убираем разряд числа в 2-й системе сч.
print( k ) | 
| С++: | 
 
✎ Решение теоретическое:
21024 + (22)64 - 26 = 21024 + 2128 - 26
При переводе в двоичную систему получим:
10...0 (1024 нуля) + 10...0 (128 нулей) - 10...0 (6 нулей)
Обратим внимание, что разница между числами большая. Т.е. при выполнении сложения в столбик, единицы в одном и том же разряде быть не могут. Так:
 10....00000  - 1024 нуля
+
       10..0  - 128 нулей
_________________________
 10....10..0  
Из первого слагаемого 10...0 (1024 нуля) запомним одну единицу в старшем бите, остальные нули нас не интересуют, так как далее мы воспользуемся другим правилом - для разницы:
 10....00000  - 1024 нуля
+
       10..0  - 128 нулей
_________________________
 10....10..0  - запомним единицу
Существует также правило:
2N - 2K = 1...1 (N - K единиц)0...0(K нулей)
По формуле выполним вычитание 2128 - 26: получим 1..1 (122 единицы) 0..0(6 нулей):
 10..0000000  - 128 нулей
-
     1000000  
_________________________
 11..1000000  - 122 единицы и 6 нулей
Прибавим к 122 получившимся единицам еще одну из первого слагаемого (10...0 (1024 нуля)) и получим:
122 + 1 = 123 единицы
Результат: 123
 
Также можно посмотреть видео решения 14 задания ЕГЭ по информатике (аналитическое решение):
📹 YouTube здесь
📹 Видеорешение на RuTube здесь
14_3: 
14 задание. Демоверсия ЕГЭ 2018 информатика:
Значение арифметического выражения:
4910 + 730 – 49
записали в системе счисления с основанием 7. 
Сколько цифр «6» содержится в этой записи?
Типовые задания для тренировки
✍ Решение:
✎ Решение с использованием программирования:
| PascalABC.net, решение 1: | 1
2
3
4
5
6
7
8
9
10
11
12
 | begin
  var x: Biginteger;
  x := Biginteger.Pow(49, 10) + Biginteger.Pow(7, 30) - 49;
  // в получившемся числе рассматриваем каждую цифру в 7-й системе сч.
  var k:=0;
  while x > 0 do
  begin
    if x mod 7 = 6 then k+=1; // если цифра = 6, то считаем ее
    x := x div 7; // убираем разряд числа в 7-й системе сч.
  end;
  println(k);
end. | 
 begin
  var x: Biginteger;
  x := Biginteger.Pow(49, 10) + Biginteger.Pow(7, 30) - 49;
  // в получившемся числе рассматриваем каждую цифру в 7-й системе сч.
  var k:=0;
  while x > 0 do
  begin
    if x mod 7 = 6 then k+=1; // если цифра = 6, то считаем ее
    x := x div 7; // убираем разряд числа в 7-й системе сч.
  end;
  println(k);
end. | 
| PascalABC.net, решение 2: | 1
2
3
4
5
6
7
 | uses school;
 
begin
  var x: bigInteger;
  x := Biginteger.Pow(49, 10) + Biginteger.Pow(7, 30) - 49;
  print(x.ToString.ToBase(7).CountOf('6'));
end. | 
 uses school;
 
begin
  var x: bigInteger;
  x := Biginteger.Pow(49, 10) + Biginteger.Pow(7, 30) - 49;
  print(x.ToString.ToBase(7).CountOf('6'));
end. | 
| Python: | 1
2
3
4
5
6
7
8
 | x = 49**10 + 7**30 - 49
k = 0
# в получившемся числе рассматриваем каждую цифру в 7-й системе сч.
while x: 
    if x % 7 == 6: # если цифра = 6, то считаем ее
        k += 1
    x //= 7 # убираем разряд числа в 7-й системе сч.
print( k ) | 
 x = 49**10 + 7**30 - 49
k = 0
# в получившемся числе рассматриваем каждую цифру в 7-й системе сч.
while x: 
    if x % 7 == 6: # если цифра = 6, то считаем ее
        k += 1
    x //= 7 # убираем разряд числа в 7-й системе сч.
print( k ) | 
| С++: | 
 
✎ Решение теоретическое:
- Приведем все числа к степеням 7:
720 + 730 - 72
Расставим операнды выражения в порядке убывания степеней:
730 + 720 - 72
Вспомним две формулы для работы со системами счисления:
1.
an = 10..0a
       n
2.
an - am = (a-1)..(a-1)0..0a
              n-m       m
Переведем первое число согласно формуле 1:
730 = 10..0
        30
В данном числе нет цифры 6, как и в остальных числах.
Цифра 6 появляется при выполнении вычитания. 
Подсчитаем все "6", используя формулу 2:
0 + (20 - 2) = 18
Получаем шестерок: 18 
Результат: 18
 
Подробное решение 14 задания демоверсии ЕГЭ смотрите на видео (аналитическое решение):
📹 YouTube здесь
📹 Видеорешение на RuTube здесь
14_2: 
Значение арифметического выражения:
4500 + 3*42500 + 16500 - 1024
записали в системе счисления с основанием 
4. 
Сколько цифр "3" содержится в этой записи?
Типовые задания для тренировки
 
✍ Решение:
✎ Решение с использованием программирования:
| PascalABC.net: | 1
2
3
4
5
6
7
 | uses school;
 
begin
  var x: bigInteger;
  x := Biginteger.Pow(4,500) + 3*Biginteger.Pow(4,2500) + Biginteger.Pow(16,500) - 1024;
  print(x.ToString.ToBase(4).CountOf('3'));
end. | 
 uses school;
 
begin
  var x: bigInteger;
  x := Biginteger.Pow(4,500) + 3*Biginteger.Pow(4,2500) + Biginteger.Pow(16,500) - 1024;
  print(x.ToString.ToBase(4).CountOf('3'));
end. | 
| Python: | 1
2
3
4
5
6
7
8
 | x = 4**500 + 3*4**2500 + 16**500 - 1024
k = 0
# в получившемся числе рассматриваем каждую цифру в 4-й системе сч.
while x: 
    if x % 4 == 3: # если цифра = 3, то считаем ее
        k += 1
    x //= 4 # убираем разряд числа в 4-й системе сч.
print( k ) | 
 x = 4**500 + 3*4**2500 + 16**500 - 1024
k = 0
# в получившемся числе рассматриваем каждую цифру в 4-й системе сч.
while x: 
    if x % 4 == 3: # если цифра = 3, то считаем ее
        k += 1
    x //= 4 # убираем разряд числа в 4-й системе сч.
print( k ) | 
| С++: | 
 
Результат: 496
 
Подробное решение данного 14 задания ЕГЭ по информатике можно посмотреть на видео (аналитическое решение):
📹 YouTube здесь
📹 Видеорешение на RuTube здесь
14_5: 
Значение арифметического выражения: 
81024 + 832 – 65 – записали в системе счисления с основанием 
8. 
Сколько цифр «7» содержится в этой записи?
Типовые задания для тренировки
 
✍ Решение:
✎ Решение с использованием программирования:
| PascalABC.net: | 1
2
3
4
5
6
7
 | uses school;
 
begin
  var x: bigInteger;
  x := Biginteger.Pow(8,1024) + Biginteger.Pow(8,32) - 65;
  print(x.ToString.ToBase(8).CountOf('7'));
end. | 
 uses school;
 
begin
  var x: bigInteger;
  x := Biginteger.Pow(8,1024) + Biginteger.Pow(8,32) - 65;
  print(x.ToString.ToBase(8).CountOf('7'));
end. | 
| Python: | 1
2
3
4
5
6
7
8
 | x = 8**1024 + 8**32 - 65
k = 0
# в получившемся числе рассматриваем каждую цифру в 8-й системе сч.
while x: 
    if x % 8 == 7: # если цифра = 7, то считаем ее
        k += 1
    x //= 8 # убираем разряд числа в 8-й системе сч.
print( k ) | 
 x = 8**1024 + 8**32 - 65
k = 0
# в получившемся числе рассматриваем каждую цифру в 8-й системе сч.
while x: 
    if x % 8 == 7: # если цифра = 7, то считаем ее
        k += 1
    x //= 8 # убираем разряд числа в 8-й системе сч.
print( k ) | 
| С++: | 
 
✎ Решение теоретическое:
- Приведем все числа к степеням восьмерки:
65 = 64 + 1 = 82 + 80;
Получаем:
81024 + 832 - (82 + 80);
81024 + 832 - 82 - 80
Вспомним две формулы для работы с системами счисления:
1.
an = 10..0a
       n
2.
an - am = (a-1)..(a-1)0..0a
              n-m       m
Переведем первое число согласно формуле 1:
81024 = 10..0
        1024
В данном числе нет цифры 7, как и в остальных числах.
Цифра 7 появляется при выполнении вычитания. У нас два таких действия, идущих подряд. Это неудобно. Необходимо, чтобы действия чередовались (a + b - c + d - e...)
Вспомним еще одну формулу:
3.
-2n = -2n+1 + 2n
! Формула предназначена для чисел в двоичной системе счисления,
но для подсчета цифр "7" в 8-й (или "6" в 7-й и т.п.) ее можно использовать
(для поиска единиц или нулей она не подходит!!!)
В нашем случае заменим часть выражения:
-82 = -83 + 82
! обратите внимание, что тождество неверно, но
при поиске количества "7" этой формулой можно воспользоваться
(для поиска единиц или нулей она не подходит!)
Получаем:
81024 + 832 - 83 + 82- 80
Получили чередование операций "+" и "-".
Теперь посчитаем все "7", используя формулу 2:
0 + (32 - 3) + (2 - 0) = 31
Получаем семерок: 31 
Результат: 31
 
14_13: 
Сколько значащих нулей в двоичной записи числа 4350 + 8340 – 2320 – 12?
✍ Решение:
✎ Решение с использованием программирования:
| PascalABC.net, решение 1: | 1
2
3
4
5
6
7
8
9
10
11
12
13
 | begin
  var b2 := biginteger(2);
  var numb := (2 * b2) ** 350 + (4 * b2) ** 340 - (1 * b2) ** 320 - 12;
  var digit: biginteger;
  var n := 0;
  while numb > 0 do
  begin
    digit := numb mod 2;
    if digit = 0 then n += 1;
    numb := numb div 2
  end;
  print(n)
 end. | 
 begin
  var b2 := biginteger(2);
  var numb := (2 * b2) ** 350 + (4 * b2) ** 340 - (1 * b2) ** 320 - 12;
  var digit: biginteger;
  var n := 0;
  while numb > 0 do
  begin
    digit := numb mod 2;
    if digit = 0 then n += 1;
    numb := numb div 2
  end;
  print(n)
 end. | 
| PascalABC.net, решение 2: | 1
2
3
4
5
6
7
 | uses school;
 
begin
  var x: bigInteger;
  x := Biginteger.Pow(4,350) + Biginteger.Pow(8,340) - Biginteger.Pow(2,320) - 12;
  print(x.ToString.ToBase(2).CountOf('0'));
end. | 
 uses school;
 
begin
  var x: bigInteger;
  x := Biginteger.Pow(4,350) + Biginteger.Pow(8,340) - Biginteger.Pow(2,320) - 12;
  print(x.ToString.ToBase(2).CountOf('0'));
end. | 
| Python: | 1
2
3
4
5
6
7
 | x = 4**350 + 8**340 - 2**320 - 12
print(x)
k = 0
while x:
  if x % 2 == 0: k += 1
  x //= 2
     print( k ) | 
 x = 4**350 + 8**340 - 2**320 - 12
print(x)
k = 0
while x:
  if x % 2 == 0: k += 1
  x //= 2
     print( k ) | 
| С++: | 
 
✎ Решение теоретическое:
4350 + 8340 – 2320 – 12
- По возможности приведем каждое слагаемое к степеням 2. Получим:
(22)350 + (23)340 - 2320 - 3*22 =
(22)350 + (23)340 - 2320 - 12 =
2700 + 21020 - 2320 - (23 + 22)
Далее рассуждаем так: количество нулей можно найти, если из общего количества цифр в результирующем числе вычесть количество не нулей (любых других цифр).
Расположим операнды по убыванию:
21020 + 2700 - 2320 - 23 - 22
Наибольшее число 21020, в нем 1021 разряд в двоичной с.с. (одна единица и 1020 нулей). То есть всего 1021 знаков.
Для того, чтобы избежать два подряд идущих минуса, воспользуемся правилом -2n = -2n+1+2n и преобразуем выражение:
21020 + 2700 - 2321+ 2320- 24 + 23 - 22
Посчитаем количество не нулей в каждом операнде:
21020 -> один не ноль
2700 - 2321 -> 379 не нулей
2320- 24 -> 316 не нулей 
23 - 22 -> один не ноль
Итого: 1+ 379+316 +1 = 697
Получаем нулей:
1021 - 697 = 324
Результат: 324
 
Задания прошлых лет для тренировки
Найти основание системы счисления и уравнения
14_7: 
Укажите, сколько всего раз встречается цифра 2 в записи чисел 13, 14, 15, …, 23 в системе счисления с основанием 3.
Типовые задания для тренировки
 
✍ Решение:
- Для начала достаточно перевести первое и последнее число предложенного интервала в троичную систему счисления. Сделаем это:
1.
 13 | 3 
 12   4 | 3 
  1   3   1   
      1
1310 = 1113
2.
23 | 3 
21   7 | 3 
2    6   2
     1
2310 = 2123
Теперь добавим промежуточные числа в троичной системе счисления (прибавляя единицу к каждому очередному полученному числу), не забывая, что в троичной системе всего три цифры (0, 1 и 2):
111, 112, 120, 121, 122, 200, 201, 202, 210, 211, 212
На всякий случай стоит посчитать количество полученных чисел и сравнить их с количеством чисел в исходной последовательности.
Теперь осталось посчитать количество цифр 2 в полученной последовательности. Их 13:
111, 112, 120, 121, 122, 200, 201, 202, 210, 211, 212
Ответ: 13
 
✍ Решение:
- Разделим уравнение на три части и вычислим каждую часть отдельно (выделим части разным цветом):
204N+1 = 204N + 2616
 1       2     3 
Используем формулу разложения числа по степеням основания:
1. 
210
204N+1
По формуле получаем:
2*(N+1)2 + 0*(N+1)1 + 4*(N+1)0 =
= 2*(N2 + 2N + 1) + 0 + 4 = 2N2 + 4N + 6
Выполним то же самое для остальных двух частей:
2.
210
204N
По формуле получаем:
2*N2 + 0*N1 + 4*N0 =
= 2N2 + 4
3.
2616 = 3810
Подставим результаты всех частей в уравнение:
2N2 + 4N + 6 = 2N2 + 4 + 38;
4N = 36;
N = 9
Результат: 9
 
✍ Решение:
- Вместо обозначения искомой системы счисления введем неизвестное x:
144x + 24x = 201x
Запишем формулу перевода в десятичную систему счисления каждого из слагаемых и сумму исходного равенства:
144 + 24 = 201
1*x2 + 4*x1 + 4*x0 + 2*x1 + 4*x0 = 2*x2 + 0*x1 + 1*x0
Упростим полученное уравнение:
x2 - 6x - 7 = 0
Решим уравнение:
D = b2 - 4ac = 36 - 4*1*(-7) = 64
x = (-b ± √D)/2a
x1 = (6 + 8)/2 = 7
x2 = (6 - 8)/2 - не подходит
x = 7
Ответ: 7
 
14_9: 
В некоторой системе счисления записи десятичных чисел 
68 и 
94 заканчиваются на 
3. 
Определите основание системы счисления.
Типовые задания для тренировки
 
✍ Решение:
- Вспомним правило:
Последняя цифра записи числа в системе счисления с основанием X - это остаток от деления этого числа на X
- Примем искомую систему счисления за x. Тогда, исходя из приведенного правила имеем:
94 / x = некоторое число и остаток 3
и
68 / x = некоторое число и остаток 3
Поскольку x должно быть целым числом, то следующее деление должно выполняться без остатка:
91/x 
65/x
Иными словами x - наибольший общий делитель чисел 91 и 65.
Найдем НОД, например, по алгоритму Евклида: 
91 - 65 = 26
65 - 26 = 39
39 - 26 = 13
26 - 13 = 13 
Получаем результат 13.
Ответ: 13
 
14_10: 
Некоторое число 
X из десятичной системы счисления перевели в системы счисления с основаниями 
16, 
8. Часть символов при записи утеряна. Позиции утерянных символов обозначены 
*:
X = *516 = *0*8
Сколько чисел соответствуют условию задачи?
Типовые задания для тренировки
 
✍ Решение:
- Данные числа с утерянными символами переведем из 16-й и из 8-й системы счисления в двоичную. Перевод будем делать триадами и тетрадами, неизвестные позиции оставим пустыми:
1. *516
    *   |    5  16
* * * * | 0 1 0 1 2
2. *0*8
  *  |  0  |  *  8
* * *|0 0 0|* * * 2
Сопоставим известные и неизвестные биты в обеих получившихся масках:
* * 0 0 0 1 0 1
Неизвестными остались 7-й и 8-й бит. Они не могут быть одновременно нулями, так как для *0*8 тогда исчезнет старший разряд. Поэтому оставшиеся варианты будут такими:
1. 01000101
2. 10000101
3. 11000101
Итого 3 варианта.
Ответ: 3
 
Предлагаем посмотреть видео решения данного 14 задания ЕГЭ (аналитическое решение):
  
📹 YouTube здесь
📹 Видеорешение на RuTube здесь
14_4: 
Укажите через запятую в порядке возрастания все основания систем счисления, в которых запись числа 75 оканчивается на 13.
Типовые задания для тренировки
 
✍ Решение:
- Так как 75 должно оканчиваться на 13, то имеем два общих случая:
1. 7510 = 13N 
2. 7510 = ...13N (число оканчивается на 13)
Рассмотрим подробно каждый случай.
1 случай:
Остаток должен быть равен 3 (последнее число в неизвестной системе), а частное должно равняться 1 (предпоследнее число в неизвестной системе):
 75|N 
  N|1  отсюда имеем => 75 - N = 3; т.е. N = 72
  3
Таким образом, мы получили одно из искомых оснований (72).
2 случай:
Искомое оканчивается на цифру 3, значит:
 75|N 
 72|y  отсюда имеем => 75 = Ny + 3, где N - целое, неотриц.
  3
и далее, частное от деления - 1 (предпоследнее число):
 75|N  
 72|  y |N   => y = Nz + 1, где z - целое, неотриц.
  3  y-1|z
       1
Получаем два равенства (систему уравнений):
75 = Ny + 3
y = Nz + 1
Подставим y из второго равенства в первое:
75 = N (Nz + 1) + 3;
75 = N2z + N + 3;
75 = N2z + N
Выразим z:
z = (72 - N)/N2
Учитывая то, что z - целое неотрицательное число, то 72 - N должно быть кратно N2, т.е. в числителе не может быть простого числа. 
Простое число 67 получается путем вычитания из 72 числа 5. Соответственно, 5 нам не подходит: N ≠ 5:
72 - 5 / 52 = 67 / 25  не делится, - не подходит!
Еще одно простое число - 71 получится при вычитании 72 - 1. Единица не подходит, так как при переводе в конце числа никак не останется 13:  N ≠ 1. 
Раз в знаменателе N2, то отбросим все числа, квадрат которых больше 72: 9, 10, ... и т.д. до бесконечности:  N < 9 
Раз в итоговом числе есть число 13, значит основание системы счисления больше 3 (т.е. цифра три присутствует в системах, начиная с 4-й): N >= 4
Проверим оставшиеся варианты - 4, 6, 7, 8:
 75 | 4 
 72 | 18| 4 
  3   16| 2
       2  => не подходит! должна быть единица
 75 | 6 
 72 | 12| 6 
  3   12| 1
       0  => не подходит! должна быть единица
 75 | 7 
 70 
  5 => не подходит! должна быть 3 
 75 | 8 
 72 | 9| 8 
  3   8| 1
       1  => подходит!
Результат: 8,72
 
Видеоразбор решения (аналитический способ):
📹 YouTube здесь
📹 Видеорешение на RuTube здесь
14_11: 
Выражение 25*325 записано в троичной системе счисления. Определите,  сколько в этой записи цифр 0, 1 и 2.
✍ Решение:
Рассмотрим каждый сомножитель отдельно.
- Первый сомножитель:
25 = 32
Переведем в троичную систему счисления (делением на 3, переписываем остатки).
Результат:
3210 = 10123
Для рассмотрения второго сомножителя будем использовать правило:

Получим:
325 = 10..0{25 нулей}3
Выполним произведение, но для простоты счета, представим, что нулей не 25, а только 3:
   1000 x
   1012 =
   ----
   2000
  1000
 0000
1000
-------
1012000
В исходном числе было 3 нуля, стало 4. Значит если было 25 нулей, то станет 25 + 1 = 26.
Единиц = 2, двоек = 1.
Ответ: "0"=26, "1"=2, "2"=1
 
Смотрите видео разбора на нашем канале (аналитическое решение):
📹 YouTube здесь
📹 Видеорешение на RuTube здесь
					 
		
	
последнее видео неправильно! В порядке возрастания, т.е. от меньшего к большему
так и есть, в порядке возрастания: сначала 8, потом 72
В 14_11 ошибка. В ответе не 26, а 25 нулей. Как было 25, так и останется — не надо прибавлять ещё один ноль. Посчитал вручную и перепроверил на калькуляторе:
32 * 3^25 = 32 * 847288609443 = 27113235502176 = 1012,00000,00000,00000,00000,00000\/3.