Всем привет! Пришло время разбора 25 задания из ЕГЭ по информатике 2021.
Это задание требует умение программировать на каком-нибудь языке программирования, который разрешён на ЕГЭ по информатике 2021.
Приступим к практике решения примерных задач из ЕГЭ по информатике 2021.
Задача (Демонстрационный вариант ЕГЭ по информатике 2021)
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [174457; 174505], числа, имеющие ровно два различных натуральных делителя, не считая единицы и самого числа. Для каждого найденного числа запишите эти два делителя в таблицу на экране с новой строки в порядке возрастания произведения этих двух делителей. Делители в строке таблицы также должны следовать в порядке возрастания.
Например, в диапазоне [5; 9] ровно два целых различных натуральных делителя имеют числа 6 и 8, поэтому для этого диапазона таблица на экране должна содержать следующие значения:
2 | 3 |
2 | 4 |

Решение:
Напишем программу в Pascal ABC.
var i, j, d1, d2, count: integer; begin for i:=174457 to 174505 do begin // Перебираем числа из диапазона. d1:=1; d2:=1; count:=0; for j:=2 to i div 2 do begin // Ищем делители для конкретного числа if count > 2 then break; if (i mod j = 0) then begin if d1 = 1 then d1:=j else d2:=j; count:=count+1; end; end; if count = 2 then begin Writeln(d1, ' ', d2, ' ', d1*d2); // Распечатываем нужные числа. end; end; End.
Здесь мы перебираем все числа из нашего диапазона с помощью цикла for.
Для каждого числа устанавливаем первоначальные значения (переменные d1, d2, count). Переменная d1 - отвечает за первый делитель, переменная d2 - за второй, переменная count - за количество делителей.
Вторым циклом for мы проверяем для конкретного числа из диапазона, какие у него делители.
Достаточно проверить значения до "половины числа". Значения, которые больше "половины числа" не могут быть делителем числа (Кроме самого числа, но в условии написано, что само число не нужно засчитывать, как делитель).
Если d1=1, значит, мы нашли первый делитель, иначе второй делитель.
Если значение переменной count больше, чем 2, то можно выйти из цикла, и проверять следующее число из диапазона.
Печатаем делители числа и их произведение, если значение переменной count равно 2.
После запуска программы получаем ответ.
Ответ:
3 | 58153 |
7 | 24923 |
59 | 2957 |
13 | 13421 |
149 | 1171 |
5 | 34897 |
211 | 827 |
2 | 87251 |
Разберём ещё одну примерную задачу из ЕГЭ по информатике 2021.
Задача (Цифры делителя)
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [33167; 33203], числа, имеющие хотя бы один натуральный трёхзначный делитель, у которого первая цифра и последняя цифра равны. Для каждого найденного числа запишите сначала само число, а затем найденный делитель в таблицу на экране с новой строки. Если таких делителей несколько, запишите наибольший.
Сами числа записать в порядке возрастания.
Например, в диапазоне [1000; 1010] ровно два целых числа, удовлетворяющих условию задачи. Поэтому для этого диапазона таблица на экране должна содержать следующие значения:
1008 | 252 |
1010 | 505 |
Решение:
Напишем программу для решения данной задачки.
var i, j : integer; begin for i:=33167 to 33203 do begin // Перебираем числа из диапазона. for j:=100 to 999 do begin // Ищем делители if (i mod j = 0) and ( j mod 10 = j div 100) then begin Writeln(i, ' ', j); // Распечатываем нужные числа. end; end; end; end.
Делители должны быть трёхзначные, поэтому перебираем числа от 100 до 999. Проверяем, является ли число делителем для конкретного числа i из диапазона [33167; 33203]. Конструкция (j mod 10 = j div 100) проверяет равны ли первая цифра и последняя у натурального трёхзначного числа.
После запуска программы получаем ответ.
Ответ:
33170 | 535 |
33174 | 171 |
33176 | 232 |
33178 | 626 |
33180 | 474 |
33182 | 353 |
33184 | 272 |
33189 | 111 |
33197 | 373 |
Продолжаем подготовку к 25 заданию из ЕГЭ по информатике 2021.
Задача (Максимальное количество делителей)
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [32633; 32900], ровно два числа, имеющих максимальное количество натуральных делителей. Для каждого найденного числа запишите сначала само число, а затем количество делителей в таблицу на экране с новой строки.
Сами числа запишите в порядке возрастания.
Например, в диапазоне [1; 10] ровно два целых числа, удовлетворяющих условию задачи. Поэтому для этого диапазона таблица на экране должна содержать следующие значения:
6 | 4 |
8 | 4 |
Решение:
Программа для данной задачи будет следующая:
var i, j, n1, n2, count_1, count_2, count : integer; begin count_1:=0; count_2:=0; n1 := 0; n2 := 0; for i:=32633 to 32900 do begin // Перебираем числа из диапазона. count:=0; for j:=1 to i div 2 do begin // Ищем делители if (i mod j = 0) then count:=count+1; end; if count>count_1 then begin if count>count_2 then begin count_1:=count_2; n1:=n2; count_2:=count; n2:=i; end else begin count_1:=count; n1:=i; end; end; end; Writeln(n1,' ', count_1+1); Writeln(n2,' ', count_2+1); end.
Раз нам нужно написать два числа, то заводим две переменные n1 и n2, а так же count_1 и count_2, где будут сохраняться количество делителей. В переменной count хранится количество делителей для каждого числа.
Механизм поиска двух максимальных значений: Проверяем больше ли переменная count, чем count_1. Если да, то нужно проверить, а вдруг она больше и чем count_2. Если она больше, чем count_2, мы значение, которое было в count_2 перекладываем в переменную count_1, а "победившее" count_2 значение записываем в саму переменную count_2.
Значения для переменных n1 и n2 в нашей задаче так же меняются, как и значения для переменных count_1 и count_2.
В конце мы прибавляем к переменным count_1 и count_2 по единице. Это делается из-за того, что мы проверяем числа до половины на то, являются ли они делители или нет. Но нужно учесть, что сами числа являются так же делителями.
Ответ:
32640 | 64 |
32760 | 96 |
Задача (Закрепление материала)
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [11166; 11241], числа, имеющие ровно три различных натуральных делителя, не считая единицы и самого числа, которые начинаются на цифру 1. Для каждого найденного числа запишите эти три делителя в таблицу на экране с новой строки в порядке возрастания произведения этих двух делителей. Делители в строке таблицы также должны следовать в порядке возрастания.
Например, в диапазоне [1; 100] ровно два целых различных натуральных делителя имеют числа 6 и 8, поэтому для этого диапазона таблица на экране должна содержать следующие значения:
10 | 12 | 15 |
10 | 15 | 18 |
Решение:
Задача похоже на демонстрационную версию ЕГЭ по информатике.
var i, j, d1, d2, d3, count, len, c, x: integer; begin for i:=11166 to 11241 do begin // Перебираем числа из диапазона. d1:=1; d2:=1; d3:=1; count:=0; for j:=2 to i div 2 do begin // Ищем делители для конкретного числа if count > 3 then break; if (i mod j = 0) then begin len:=0; x:=j; while x>1 do begin // Узнаём длину числа len:=len+1; x:=x div 10; end; c:=1; while len>0 do begin // Получаем число 10^len c:=c*10; len:=len-1; end; if j div c = 1 then begin if d1 = 1 then d1:=j else begin if d2=1 then d2:=j else d3:=j; end; count:=count+1; end; end; end; if count = 3 then begin Writeln(d1, ' ', d2, ' ', d3, ' ', d1*d2*d3); // Распечатываем нужные числа. end; end; End.
Механизм определения трёх делителей берём из первой задачки.
Узнаём количество разрядов делителя и записываем в переменную len (Записываем количество разрядов минус 1).
Чтобы узнать первую цифру, например, числа 543, нужно применить операцию целочисленного деления 543 div 100 = 5. Поэтому формируем переменную с со значением 10^len и с помощью неё проверяем первую цифру.
Ответ:
15 | 135 | 1245 |
13 | 123 | 1599 |
17 | 153 | 1241 |
10 | 1124 | 1405 |
12 | 1401 | 1868 |
122 | 184 | 1403 |
Оставить коментарий: