Питон 25 задание егэ как решать
Перейти к содержимому

Питон 25 задание егэ как решать

  • автор:

2. Полезные функции и модули для эффективного решения задачи № 25 ЕГЭ

Для решения задачи \(25\) полезно уметь пользоваться \(f\)-строками — форматированными выражениями, содержащими поля замены. Форматированные \(f\)-строки имеют вид f’< текст>‘ . Поля замены ограничиваются фигурными скобками, и значения в них подставляются во время выполнения программы.

Например, фрагменты программ:

print(‘Решать задания ЕГЭ мне помогают материалы ЯКласс!’)

print(f’Решать задания ЕГЭ мне помогают материалы ЯКласс!’)

будут выполняться одинаково, хотя в верхней строке обычное форматирование, а во второй — \(f\)-строка. Обратим на это внимание в следующем примере.

0-1.png

Рис. \(1\). Пример вывода

0-2.png

Рис. \(2\). Результат работы программы \(1\)

Для аккуратного форматирования придётся воспользоваться разделителем sep\(=»\) и вставкой дополнительных пробелов в текст для того, чтобы избавиться от автоматически расставляемых пробелов на месте запятых в функции print.

Сравни результат работы с результатом работы \(f\)-строки:

0-3.png

Рис. \(3\). Пример вывода \(f\)-строки

0-4.png

Рис. \(4\). Результат работы программы \(2\)

Конечно, этим не исчерпываются возможности \(f\)-строк.

Рассмотрим задачу на поиск делителей числа.

Пример \(1\)

Для некоторого случайного числа в интервале \([4,12300]\) подсчитай количество нетривиальных делителей и выведи их.

Решение

1-1.png

1-2.png

Рис. \(6\). Результат работы программы \(3\)

Обрати внимание на оформление вывода. Результаты работы программы форматированы как \(f\)-строки. В качестве объекта в фигурных скобках записана стандартная функция len от другой функции mult. Одна из этих функций составлена пользователем и описана здесь же в программе. Кроме использования вычислений в \(f\)-строке мы также можем форматировать нужные нам строки.

Пример \(2\)

Даны символы «e», «c», «t», «f», «j», «k», «y». Сколько различных имён файлов, соответствующих маске \(1?23.?x?\), можно составить из предложенных символов? Сколько из них будут иметь расширение «txt» или «exe»?

2-1.png

Обрати внимание: для контроля за работой программы мы вывели на печать имена файлов с заданными расширениями.

Рис. \(8\). Результат работы программы \(4\)
Разбор досрочного варианта \(2022\)

Назовём маской числа последовательность цифр в которой также могут встречаться следующие символы:

символ «?» означает ровно одну произвольную цифру;

символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.

Среди натуральных чисел, не превышающих \(10**9\), найди все числа, соответствующие маске \(12345?6?8\) и делящиеся на \(17\) без остатка.

В ответе запиши в первом столбце таблицы все найденные числа в порядке возрастания, а во втором столбце — соответствующие им частные от деления на \(17\).

Здесь полем замены будут цифры, занимающие места «?».

d1.png

Рис. \(9\). Программа \(3\)

d2.png

Рис. \(10\). Результат работы программы \(5\)

Для решения задач с применением масок числа полезно знать работу функции product модуля itertools.

В условии задачи досрочного варианта упоминается, что в маске может находиться «*», а это набор символов любой длины, в том числе и нулевой.

Функция product модуля itertools сформирует нам необходимую комбинацию символов для замены «*».

Рассмотрим пример её работы.

Пример \(3\)

Составь все возможные пары из элементов строк \(‘0123’\) и \(‘abcd’\) — такие, чтобы первый элемент был из числовой строки, а следующий — из текстовой. (Множество таких пар элементов называется декартовым произведением первой и второй из заданных строк.)

3-1.png

Мы получили список, состоящий из кортежей, первый элемент которых — из числовой строки, а второй — из текстовой.

3-2.png

Рис. \(12\). Результат работы программы \(6\)

Но для вставки вместо «*» нам нужно преобразовать кортежи, из которых состоит список, в строки.

Пример \(3A\)

3-3.png

Метод join преобразовал кортежи в строки.

3-4.png

Рис. \(13\). Результат работы программы \(7\)

Если необходимо составить комбинации пар, или троек, или иного количества символов одного множества, то необходимо задать параметр repeat для функции product.

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

Всем привет! Добрались мы до 25 задания из ЕГЭ по информатике 2023.

Рассмотрим типовые задачи, а так же новые формулировки 25 задания из ЕГЭ по информатике 2023.

Приступаем к первой классической задаче.

Задача (ЕГЭ по информатике, Демо 2022)

Пусть M – сумма минимального и максимального натуральных делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то значение M считается равным нулю.

Напишите программу, которая перебирает целые числа, бо́льшие 700 000, в порядке возрастания и ищет среди них такие, для которых значение M оканчивается на 8. Выведите первые пять найденных чисел и соответствующие им значения M.

Формат вывода: для каждого из пяти таких найденных чисел в отдельной строке сначала выводится само число, затем – значение М. Строки выводятся в порядке возрастания найденных чисел.

Количество строк в таблице для ответа избыточно.

ЕГЭ по информатике демоверсия 2022 - задание 25

На ЕГЭ по информатике 2023 удобно писать программы на языке Python.

count=0 for i in range(700001, 800000): m=0 a=[] for j in range(2, int(i**0.5)+1): if i%j==0: a.append(j) b=i//j if j!=b: a.append(b) if len(a)>=1: a.sort() m=a[0]+a[-1] if m%10==8: print(i, m) count = count + 1 if count == 5: break 

В данной программе перебираются числа в цикле for, начиная с 700001.

Для каждого числа i заводим искомую переменную m и список a, где будем хранить все делители этого числа, не считая 1 и самого числа. Затем, с помощью ещё одного цикла for перебираются числа с 2 до корня числа i (включительно).

Если до корня числа включительно не встретился ни один делитель, значит, у числа нет делителей, кроме 1 и самого числа.

ЕГЭ по информатике демоверсия 2022 - задание 25 поиск делителей

Пусть у нас есть число A. Если у этого числа есть делитель d1, то он находится до корня этого числа (или равен корню числа). А вот то число (так же делитель d4), на которое умножается d1, чтобы получить A, будет находиться после корня A (или равен корню).

Получается, что у каждого делителя есть своя пара. У единицы — это само число. Причём, один делитель из пары находится до корня, другой после корня. Исключением будет тот случай, когда из числа А извлекается целый корень. Тогда для этого корня не будет пары (парой и будет само это число √A * √A = A).

Таким образом, нам достаточно пройтись до корня числа включительно, чтобы найти все делители числа i. Мы идём от 2, значит, единица и само число не рассматривается.

Если переменная j является делителем, то мы её заносим в список a. Сразу ищем «брата» b делителя j. Если «брат» b и переменная j не равны друг другу (равны они могут быть, если из числа i извлекается корень, например 16 = 4*4), то заносим переменную b так же в список a. Нет смысла заносить в список a одинаковые делители.

После того, как закончился цикл j, в списке a будут все делители числа i, кроме единицы и самого числа.

Если там есть хотя бы один делитель, то, значит, имеется максимальный и минимальный делитель. Мы сортируем список a, чтобы все делители были в порядке возрастания, т.к. изначально они не были упорядочены.

Находим число m. Это сумма максимального и минимального делителя. Первый элемент a[0] — это минимальный делитель. Последний элемент a[-1] — это максимальный делитель.

Если число, m подходит по условию, то мы печатаем число i и m.

Счётчик count нужен, чтобы распечатать первые пять чисел.

700005 233338
700007 100008
700012 350008
700015 140008
700031 24168

Напишите программу, которая перебирает целые числа, большие 550 000, в порядке возрастания и ищет среди них такие, для которых наибольший натуральный делитель, не равный самому числу, не является простым числом.

Программа должна найти и вывести первые 6 таких чисел и соответствующие им значения упомянутых делителей.

Формат вывода: для каждого из 6 таких найденных чисел в отдельной строке сначала выводится само число, затем упомянутый делитель. Строки выводятся в порядке возрастания найденных чисел.

Например, для числа 105 наибольший натуральный делитель 35 не является простым, для числа 15 наибольший натуральный делитель 5 — простое число, а для числа 13 такого делителя не существует.

ЕГЭ по информатике демоверсия 2022 - задание 25

Здесь мы ищем наибольший делитель числа, как и в прошлом решении.

def Pr(x): for i in range(2, int(x**0.5)+1): if x%i==0: return False return True count=0 for i in range(550001, 1000000): a=[] for j in range(2, int(i**0.5) + 1): if i%j==0: a.append(j) b=i//j if j!=b: a.append(b) if len(a)>=1: a.sort() if not(Pr(a[-1])): count=count+1 print(i, a[-1]) if count==6: break 

Чтобы проверить число, является ли оно простым, напишем функцию Pr(). Там мы проходим до корня числа. Если не встретился не один делитель, значит, число простое — возвращаем True. Если до корня хотя бы один делитель встретили — возвращаем False.

Остальное похоже на предыдущую задачу.

550002 275001
550004 275002
550005 183335
550008 275004
550010 275005
550011 183337

Задача (Ровно 4 различных делителя)

Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [258274; 258297], числа, имеющие ровно 4 различных делителя. Выведите для каждого найденного числа два наибольших делителя в порядке возрастания.

import math for i in range(258274, 258298): a=[] for j in range(1, int(math.sqrt(i))+1): if i%j==0: a.append(j) b=i//j if j!=b: a.append(b) if len(a)==4: a.sort() print(a[2], a[3])

Здесь для каждого числа 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] и имеющие ровно три нетривиальных делителя. Для каждого найденного числа запишите в ответе само число и его наибольший нетривиальный делитель. Найденные числа расположите в порядке возрастания.

import math for i in range(4234679, 10157813): if int(math.sqrt(i))**2 == i: a=[] for j in range(2, int(math.sqrt(i))+1): if i%j==0: a.append(j) b=i//j if j!=b: a.append(b) if len(a)==3: a.sort() print(i, a[2])

Как у нас могут быть три различных нетривиальных делителя, когда делители идут, как мы выяснили, парами? Это может быть, когда существует целый корень из этого числа. Тогда в паре два числа будут одинаковыми (√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.

i=12347 #Вместо звёздочки ноль разрядов if i%141==0: print(i, i//141) #Вместо звёздочки один разряд for x in '0123456789': s = '1234' + x + '7' i=int(s) if i%141==0: print(i, i//141) #Вместо звёздочки два разряда for x in '0123456789': for y in '0123456789': s = '1234' + x + y + '7' i=int(s) if i%141==0: print(i, i//141) #Вместо звёздочки три разряда for x in '0123456789': for y in '0123456789': for z in '0123456789': s = '1234' + x + y + z + '7' i = int(s) if i%141==0: print(i, i//141)

Таким образом, нужно рассмотреть, когда вместо звёздочки ноль разрядов, один разряд, два разряда и три разряда.

Каждый разряд перебираем как цифры (символы). Формируем строку s, а затем её переводим в тип int.

Когда два разряда или три разряда нужно перебирать строку с помощью вложенных циклов.

Второй способ через fnmatch

Функция fnmatch() модуля fnmatch проверяет, соответствует ли строка имени файла шаблонной строке, возвращая True или False .

from fnmatch import * s = ['Привет','пакет','приток','перемена'] for x in s: if fnmatch(x,'п*е?'): print(x,'yes') else: print(x,'no')

Строки Привет и пакет соответствуют шаблону (маске) п*е?

* — это любая группа символов (в том числе пустая)

? — ровно один любой символ (пустоты быть не может)

from fnmatch import * for i in range(141, 10**8+1, 141): if fnmatch(str(i), '1234*7'): print(i, i//141)
1234737 8757
12341307 87527
12342717 87537
12344127 87547
12345537 87557
12346947 87567
12348357 87577
12349767 87587

Рубрика «ЕГЭ Задание 25»

ЕГЭ информатика 25 задание разбор, теория, как решать.

Создание программы для обработки целочисленной информации, (В) — 2 балла

Е25.24 сумма делителей которых соответствует маске *7?

18.06.2023 ЕГЭ Задание 25 Администратор Комментарии: 0

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы: – символ «?» означает ровно одну произвольную цифру; – символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность. Например, маске 123*4?5 соответствуют числа 123405 и 12300405. Найдите первые пять чисел, больших 500 000, сумма делителей …

Е25.23 найдите все числа, соответствующие маске 12??36*1, делящиеся на 273 без остатка

01.05.2023 ЕГЭ Задание 25 Администратор Комментарии: 0

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы: – символ «?» означает ровно одну произвольную цифру; – символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность. Например, маске 123*4?5 соответствуют числа 123405 и 12300405. Среди натуральных чисел, не превышающих 108, найдите все числа, …

Е25.22 которые соответствуют маске 1?7246*1 и при этом без остатка делятся на 4173

12.03.2023 ЕГЭ Задание 25 Администратор Комментарии: 0

Маска числа – это последовательность цифр, в которой могут встречаться специальные символы «?» и «*». Символ «?» означает ровно одну произвольную цифру, символ «*» означает произвольную (в том числе пустую) последовательность цифр. Пример. Маске 123*4?5 соответствуют числа 123405 и 12376415. Найдите все натуральные числа, не превышающие 1010, которые соответствуют маске 1?7246*1 и при этом без …

Е25.21 соответствующие маске 1?2139*4, делящиеся на 2023 без остатка

26.12.2022 ЕГЭ Задание 25 Администратор Комментарии: 0

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы: – символ «?» означает ровно одну произвольную цифру; – символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задавать и пустую последовательность. Например, маске 123*4?5 соответствуют числа 123405 и 12300405. Среди натуральных чисел, не превышающих 1010, найдите все числа, …

Е25.20 M(k) нельзя представить в виде произведения трёх различных натуральных чисел

11.05.2022 ЕГЭ Задание 25 Администратор Комментарии: 0

Пусть M(k) = 9 000 000 + k, где k – натуральное число. Найдите пять наименьших значений k, при которых M(k) нельзя представить в виде произведения трёх различных натуральных чисел, не равных 1. В ответе запишите найденные значения k в порядке возрастания. чно. Открытый вариант ИНФОРМАТИКА КИМ ЕГЭ 2022 — задание №25

Е25.19 найдите все числа, соответствующие маске 12345?7?8, делящиеся на число 23 без остатка.

29.04.2022 ЕГЭ Задание 25 Администратор Комментарии: 0

Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы: – символ «?» означает ровно одну произвольную цифру; – символ «*» означает любую последовательность цифр произвольной длины; в том числе «*» может задаватьи пустую последовательность. Например, маске 123*4?5 соответствуют числа 123405 и 12300405. Среди натуральных чисел, не превышающих 109, найдите все числа, соответствующие …

Е25.18 Пусть М — сумма минимального и максимального натуральных делителей целого числа

28.02.2022 ЕГЭ Задание 25 Администратор Комментарии: 0

Пусть М — сумма минимального и максимального натуральных делителей целого числа, не считая единицы и самого числа. Если таких делителей у числа нет, то значение М считается равным нулю. Напишите программу, которая перебирает целые числа, большие 220 000, в порядке возрастания и ищет среди них такие, для которых значение М оканчивается на 4. Выведите первые …

Е25.17 Пусть M(N) – пятый по величине делитель натурального числа N без учёта самого числа и единицы

17.02.2022 ЕГЭ Задание 25 Администратор Комментарии: 0

Пусть M(N) – пятый по величине делитель натурального числа N без учёта самого числа и единицы. Например, M(1000) = 100. Если у числа N меньше 5 различных делителей, не считая единицы и самого числа, считаем, что M(N) = 0. Найдите 5 наименьших натуральных чисел, превышающих 460 000 000, для которых M(N) > 0. В ответе …

Е25.16 10 простых чисел наиболее приближенные к числу 10000000

26.01.2022 ЕГЭ Задание 25 Администратор Комментарии: 0

Напишите программу, которая находит 10 простых чисел наиболее приближенные к числу 10000000 (10 миллионов). Причем 5 найденных чисел должны быть меньше заданного числа, остальные 5 чисел-больше. Найденные числа расположите в порядке возрастания. В качестве ответа выведите пары чисел — расстояние от найденного числа до 10000000 и само число. Например, для числа 50 ответ должен быть …

Е25.15 Пусть M (N) – сумма двух наибольших различных натуральных делителей

22.12.2021 ЕГЭ Задание 25 Администратор Комментарии: 0

Пусть M (N) – сумма двух наибольших различных натуральных делителей натурального числа N, не считая самого числа. Если у числа N меньше двух таких делителей, то M (N) считается равным 0. Найдите 5 наименьших натуральных чисел, превышающих 12 000 000, для которых 0 < M (N) < 10 000. В ответе запишите найденные значения M …

25 задание ЕГЭ

Author24 — интернет-сервис помощи студентам

Здравствуйте, помогите пожалуйста решить задачу на питоне.
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [153222; 153270], числа, единственным образом представимые в виде суммы квадратов двух натуральных чисел (a 2 +b 2 , где a ≤ b). Для каждого найденного числа запишите соответствующие два значения a и b. Значения в строке таблицы также должны следовать в порядке возрастания.
Например, в диапазоне [50;54] единственным образом могут быть представлены в виде суммы квадратов числа 52=4^2+6^2 и 53=2^2+7^2. Число 50 может быть представлено в виде суммы квадратов двумя способами: 50=1^2+7^2=5^2+5^2. Таким образом, для диапазона [50;54] таблица на экране должна содержать следующие значения:
4 6
2 7

есть готовая программа на паскале:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
const a = 153222; b = 153270; var i, j, k, p: integer; begin for i := a to b do begin k := 0; for j := 1 to trunc(sqrt(i div 2)) do if frac(sqrt(i - j * j)) = 0 then begin p := j; inc(k) end; if k = 1 then writeln(p, ' ', sqrt(i - p * p):0:0) end end.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *