ЕГЭ по информатике 2023 — Задание 25 (Делимость чисел)

Всем привет! Добрались мы до 25 задания из ЕГЭ по информатике 2023.
Рассмотрим типовые задачи, а так же новые формулировки 25 задания из ЕГЭ по информатике 2023.
Приступаем к первой классической задаче.
Задача (ЕГЭ по информатике, Демо 2022)
Пусть M – сумма минимального и максимального натуральных делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то значение M считается равным нулю.
Напишите программу, которая перебирает целые числа, бо́льшие 700 000, в порядке возрастания и ищет среди них такие, для которых значение M оканчивается на 8. Выведите первые пять найденных чисел и соответствующие им значения M.
Формат вывода: для каждого из пяти таких найденных чисел в отдельной строке сначала выводится само число, затем – значение М. Строки выводятся в порядке возрастания найденных чисел.
Количество строк в таблице для ответа избыточно.
На ЕГЭ по информатике 2023 удобно писать программы на языке Python.
В данной программе перебираются числа в цикле for, начиная с 700001.
Переменная b — считается наибольшим делителем числа i. Затем, с помощью ещё одного цикла for перебираются числа с 2 до корня числа i (включительно). Ищем тем самым наименьший делитель.
Если до корня числа включительно не встретился ни один делитель, значит, у числа нет делителей, кроме 1 и самого числа.
Пусть у нас есть число A. Если у этого числа есть делитель d1, то он находится до корня этого числа. А вот то число (так же делитель d4), на которое умножается d1, чтобы получить A, будет находиться после корня A.
Получается, что у каждого делителя есть своя пара. У единицы — это само число. Причём один делитель из пары находится до корня, другой после корня. Исключением будет тот случай, когда из числа А извлекается целый корень. Тогда для этого корня не будет пары (парой и будет само это число √A * √A = A).
Таким образом, первый найденный делитель будет являться наименьшим делителем. А вот делительный, который находится в паре с наименьшим делителем, будет наибольшим.
После того, как мы нашли наименьший делитель (он будет сидеть в переменной j) и наибольший делитель b, выходим из второго цикла for.
Если переменная b осталась равна нулю, то, значит, у числа i нет указанных делителей, и переменная M должна равняться 0. Если b не равна нулю, то M=j+b.
Проверить, на что оканчивается число, можно узнав остаток от деления числа на 10.
Переменная count следит, чтобы было распечатано ровно 5 чисел, которые удовлетворяют условию задачи.
Ответ:
700005 | 233338 |
700007 | 100008 |
700012 | 350008 |
700015 | 140008 |
700031 | 24168 |
Напишите программу, которая перебирает целые числа, большие 550 000, в порядке возрастания и ищет среди них такие, для которых наибольший натуральный делитель, не равный самому числу, не является простым числом.
Программа должна найти и вывести первые 6 таких чисел и соответствующие им значения упомянутых делителей.
Формат вывода: для каждого из 6 таких найденных чисел в отдельной строке сначала выводится само число, затем упомянутый делитель. Строки выводятся в порядке возрастания найденных чисел.
Например, для числа 105 наибольший натуральный делитель 35 не является простым, для числа 15 наибольший натуральный делитель 5 — простое число, а для числа 13 такого делителя не существует.
Здесь мы ищем наибольший делитель числа, как и в прошлом решении.
Чтобы проверить число, является ли оно простым, напишем функцию Pr(). Там мы проходим до корня числа. Если не встретился не один делитель, значит, число простое — возвращаем True. Если до корня хотя бы один делитель встретили — возвращаем False.
Ответ:
550002 | 275001 |
550004 | 275002 |
550005 | 183335 |
550008 | 275004 |
550010 | 275005 |
550011 | 183337 |
Задача (Ровно 4 различных делителя)
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [258274; 258297], числа, имеющие ровно 4 различных делителя. Выведите для каждого найденного числа два наибольших делителя в порядке возрастания.
Здесь для каждого числа i заводим массив a, где будем сохранять все его делители. Идём как всегда до корня. Если мы нашли делитель, мы добавляем его в массив a c помощью команды append и ищем его «брата». Второй делитель («брат») не должен равняться самому делителю j, т.к. нам сказали, что все делители должны быть различны. Одинаковые делители j и b могут получится, если из нашего числа i извлекается целый корень. Ведь для делителя √i является парой этот же делитель ( √i* √i=i).
После прохождения внутреннего цикла (с переменной j) в массиве a будут сидеть все делители числа i. Если их ровно 4, то сортируем массив a и выводим на экран два наибольших.
Ответ:
15193 | 258281 |
1427 | 258287 |
1493 | 258289 |
36899 | 258293 |
51659 | 258295 |
Назовём нетривиальным делителем натурального числа его делитель, не равный единице и самому числу. Найдите все натуральные числа, принадлежащие отрезку [4234679; 10157812] и имеющие ровно три нетривиальных делителя. Для каждого найденного числа запишите в ответе само число и его наибольший нетривиальный делитель. Найденные числа расположите в порядке возрастания.
Как у нас могут быть три различных нетривиальных делителя, когда делители идут, как мы выяснили, парами? Это может быть, когда существует целый корень из этого числа. Тогда в паре два числа будут одинаковыми (√i* √i = i). Поэтому в этой задаче нас интересуют числа из которых извлекается елый корень.
Если этим рассуждением не воспользуемся, то программа будет считать очень долго, потому что здесь диапазон и сами числа очень большие.
Далее, решаем, как и в прошлый раз.
Ответ:
4879681 | 103823 |
7890481 | 148877 |
Задача (ЕГЭ по информатике, 20.06.22)
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
— символ «?» означает ровно одну произвольную цифру;
— символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответсвуют числа 123405 и 12300405.
Среди натуральных чисел, не превышающих 10 8 , найдите все числа, соответствующие маске 1234*7, делящиеся на 141 без остатка.
В ответе запишите в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие им результаты деления этих чисел на 141.
Здесь самый главный момент заключается в том, что есть верхняя граница 10 8 . Т.е. самое большое число, которое нужно рассмотреть 1234[999]7 8 = 100000000. Нижняя граница тоже задана, когда вместо звёздочки ни одной цифры не будет 12347.
Таким образом, нужно рассмотреть, когда вместо звёздочки ноль разрядов, один разряд, два разряда и три разряда.
Каждый разряд перебираем как цифры (символы). Формируем строку s, а затем её переводим в тип int.
Когда два разряда или три разряда нужно перебирать строку с помощью вложенных циклов.
задачи егэ по информатике на пары элементов массивов
Задачи егэ с номером 25 по информатике про подряд идущие пары элементов массива
В данной статье мы разберем решение задач с номером 25 из егэ по информатике на языке Python по теме подряд идущие пары элементов массива В этих задачах дается начало программы, по вводу массива и список переменных, которые можно использовать, необходимо подсчитать количество пар элементов массива, удовлетворяющих определенному условию. Напомним, что массив — это набор элементов одного типа с общим именем, к каждому элементу массива в Python можно обратиться по его индексу. Нумерация элементов массивов в Python начинается с 0.Если размер массива заранее не дан то нужно использовать следующую структуру в Python для объявления и заполнения его с клавиатуры. Подробно о работе с массивами в Python
a = []
n=int(input('введите длину массива'))
for i in range(0, n):
a.append(int(input()))
print(a)
В задачах на обработку данных массива в Python используется цикл for в котором мы перебираем все индексы и обращаемся к элементам массива по индексу используя переменную цикла. Напишем программу на Python, в которой вводится массив из целых чисел, и подсчитывает количество элементов, которые делятся на 2. В программе вводится переменная k, которая отвечает за подсчёт элементов, перед циклом подсчёта элементов она обнуляется. Внутри цикла перебора элементов массивов ставится условие на проверку чётности числа, если условие выполняется, то значение счётчика k увеличивается на 1.
if a[i] % 2==0:
k = k+1
Полная программа подсчёта чётных элементов в массиве на Python.
a = []
n = int(input("Введите длину массива"))
for i in range (n):
a.append (int(input()))
print (a)
k = 0
for i in range (n):
if a[i] % 2==0:
k = k+1
print ("Количество чётных элементов", k)
Если в задаче требуется проанализировать условие на пару соседних элементов массива, то в условии мы обращаемся к первому элементу пары имя массива[i], а ко второму элементу имя массива[i+1]. Чтобы не зайти за границы массива, в цикле перебора массивов в выражении range(граница – 1).
Для совместного выполнения условий на пару элементов массива используется логическая операция and. Пример программы, которая подсчитывает количество пар элементов массивов, сумма которых делится на 5, но не делится на 10 на Python. Это стандартная задача с номером 25 на экзамене егэ по информатике.
a = []
n = int(input("Введите длину массива"))
for i in range (n):
a.append (int(input()))
print (a)
k = 0
for i in range (n-1):
if ((a[i]+a[i+1]) % 5==0 and (a[i]+a[i+1]) % 10!=0):
k = k+1
print ("Количество нужных пар", k)
Для того, чтобы проверить, делится ли переменная на какое-то число, в условии используется такое выражение
переменная % число == 0
Например, чтобы проверить, что переменная a делится на 5, нужно записать
if (a % 5 == 0):
Для того, чтобы проверить, что переменная не делится, в условии используется такое выражение
переменная % число != 0
Например, чтобы проверить, что переменная не делится на 10, в условии используется такое выражение
if (a % 10 != 0):
Разберём еще один пример задачи с номером 25 из егэ по информатике на пару соседних элементов массива
Дан массив из 30 элементов. Элементы массива могут принимать целые значения от –100 до 100 включительно. Напишите программу на Python, которая подсчитывает количество пар элементов массива, произведение которых отрицательно, а сумма кратна 5.
a = []
n = int(input("Введите длину массива"))
for i in range (n):
a.append (int(input()))
print (a)
k = 0
for i in range (n-1):
if ((a[i]*a[i+1]) < 0 and (a[i]+a[i+1]) % 5==0):
k = k+1
print ("Количество нужных пар", k)
Перейти к содержанию курса по python
Полезно почитать по теме решение на python задач сномером 25 егэ по информатике на тему массивы
Решение задач на python на массивы с накопителем
ЕГЭ информатика 25 задание(python). Что не так в моей программе?
Задание:
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [312614; 312651], числа, имеющие ровно шесть различных натуральных делителей. Для каждого найденного числа запишите эти шесть делителей в шесть соседних столбцов на экране с новой строки. Делители в строке должны следовать в порядке возрастания.
Например, в диапазоне [12; 15] ровно шесть различных натуральных делителей имеет число 12, поэтому для этого диапазона вывод на экране должна содержать следующие значения:
1 3 9 34739 104217 312651
Не знаю в чем причина. До этого абсолютно идентичная программа только с другими числами выводила все на ура
Задача №25. Написание фрагмента программы.
В задачах этого типа встречаются следующие основные алгоритмические (программные) блоки:
Перебор элементов массива
Для одномерного массива запускается цикл по всем его элементам.
Для двумерного массива – цикл в цикле по строкам и столбцам.
Для n-мерного массива – n вложенных циклов.
Перебор элементов массива, удовлетворяющих условию
Для перебора элементов массива, удовлетворяющих условию (например, только четных), в начале цикла устанавливается условие. Тогда все дальнейшие действия выполняются только при выполнении этого условия. Если же условие не выполняется, цикл переходит к следующему элементу массива.
Обмен местами элементов массива
Производится аналогично обмену значениями переменных. Если нужно поменять местами n-й и k-й элементы массива, то n-й элемент сохраняется в буферную переменную, затем значение k-го элемента копируется в n-й, а значение буферной переменной копируется в k-й элемент.
Поиск максимального (минимального) элемента массива
При поиске максимального элемента массива за предполагаемый максимум берется первый элемент массива или число, заведомо меньшее любого элемента массива. Затем каждый следующий элемент массива сравнивается с предполагаемым максимумом, и если значение этого элемента больше, то оно становится новым предполагаемым максимумом.
Аналогично, при поиске минимального элемента массива за предполагаемый минимум берется первый элемент массива или число, заведомо большее любого элемента массива. Затем каждый следующий элемент массива сравнивается с предполагаемым минимумом, и если значение этого элемента меньше, то оно становится новым предполагаемым минимумом.
Вычисление суммы элементов массива
Сначала переменной, выделенной под хранение суммы, присваивается значение 0. Затем, при последовательном переборе элементов массива, значение суммы складывается со значением текущего элемента массива и становится новым значением суммы.
Вычисление произведения элементов массива
Сначала переменной, выделенной под хранение произведения, присваивается значение 1. Затем, при последовательном переборе элементов массива, значение произведения умножается на значение текущего элемента массива и становится новым значением произведения.
Вычисление среднего значения
При вычислении среднего значения выполняется вычисление суммы, а затем сумма делится на количество элементов массива.
Необходимо учитывать, что если в используемом языке программирования есть готовые функции для обработки массивов, то их использовать при решении задачи нельзя.
Дан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от –10 000 до 10 000 включительно. Опишите на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести количество пар элементов массива, в которых хотя бы одно число делится на 3. В данной задаче под парой подразумевается два подряд идущих элемента массива. Например, для массива из пяти элементов: 6; 2; 9; –3; 6 – ответ: 4.
Исходные данные объявлены так, как показано ниже на примерах для некоторых языков программирования и естественного языка. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать некоторые из описанных переменных.
Бейсик
Python
DIM A (1 TO N) AS INTEGER
DIM I AS INTEGER,
J AS INTEGER,
K AS INTEGER
FOR I = 1 TO N
INPUT A(I)
NEXT I
# целочисленные переменные j и k
for i in range(0, n):
Паскаль
Алгоритмический язык
var
a: array [1..N] of integer;
i, j, k: integer;
begin
for i := 1 to N do
readln(a[i]);
нач
цел N = 20
целтаб a[1:N]
цел i, j, k
нц для i от 1 до N
ввод a[i]
кц
Си
Естественный язык
int main() <
int a[N];
int i, j, k;
for (i = 0; i < N; i++)
return 0;
Объявляем массив A из 20 элементов.
Объявляем целочисленные переменные I, J, K.
В цикле от 1 до 20 вводим элементы массива A с 1-го по 20-й.
В качестве ответа Вам необходимо привести фрагмент программы (или описание алгоритма на естественном языке), который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например Free Pascal 2.6) или в виде блок-схемы. В этом случае Вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии (например, в образце, записанном на естественном языке).
Пример программы на языке Паскаль
for i := 1 to N-1 do
if (a[i] mod 3=0) or (a[i+1] mod 3=0) then
Дан целочисленный массив из 30 элементов. Элементы массива могут принимать целые значения от 0 до 1000. Элемент массива называется хорошим, если это двузначное число, причём цифра в разряде десятков больше, чем цифра в разряде единиц. Опишите на одном из языков программирования алгоритм, позволяющий найти и вывести сумму всех хороших элементов массива.
Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из них.
Бэйсик
Паскаль
DIM A(N) AS INTEGER
DIM I, J, S AS INTEGER
FOR I = 1 TO N
INPUT A(I)
NEXT I
var
a: array [1..N] of integer;
i, j, s: integer;
begin
for i:=l to N do
readln(a[i]) ;
Си
Алгоритмический язык
void main()<
int a[N];
int i, j, s;
for (i=0; i < N; i++)
нач
цел N=30
целтаб а[1:N]
цел i, j, s
нц для i от 1 до N
ввод а[i]
кц
В качестве ответа Вам необходимо привести фрагмент программы, который должен находиться на месте многоточия. Вы можете записать решение также на другом языке программирования (укажите название и используемую версию языка программирования, например, Free Pascal 2.4) или в виде блок-схемы. В этом случае вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.
Пример программы на языке Паскаль
for i:=1 to N do begin
if (10<=a[i]) and (a[ i ] <= 9 9) and
((a[i] div 10) > (a[i] mod 10) ) then s:=s+a[i];
Ты нашел то, что искал? Поделись с друзьями!
Благодарим за то, что пользуйтесь нашими материалами. Информация на странице «Задача №25. Написание фрагмента программы.» подготовлена нашими авторами специально, чтобы помочь вам в освоении предмета и подготовке к экзаменам. Чтобы успешно сдать необходимые и поступить в ВУЗ или колледж нужно использовать все инструменты: учеба, контрольные, олимпиады, онлайн-лекции, видеоуроки, сборники заданий. Также вы можете воспользоваться другими статьями из разделов нашего сайта.