Информатика | Илья Андрианов | itpy 🧑‍💻
1.04K subscribers
265 photos
21 videos
19 files
633 links
По рекламе: @ilandroxxy

Шпаргалки: clck.ru/3FwqWt
📚 Наши курсы: clck.ru/3FwqYb

Разборы: clck.ru/3Fwqay
💬 Чатик: clck.ru/3FwqZa

📺 YouTube: clck.ru/3FwqbX

🙋‍♂️ Я автор: @ilandroxxy
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера 6210 #kege по информатике #ЕГЭ25

Полный разбор задачи в Notion

Интересная задача 25 номера с масками и поиском делителей, то есть объединяет в себе оба типа задач. Код решения:
from fnmatch import *


def divisors(num):
div = []
for j in range(1, int(num**0.5)+1):
if num % j == 0:
div.append(j)
div.append(num // j)
return sorted(set(div))


for x in range(53, 10**7, 53):
if fnmatch(str(x), '*2?2*'):
if str(x) == str(x)[::-1]:
d = divisors(x)
if len(d) > 30:
print(x, sum(d))


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥95🔥4
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера 7357 #kege по информатике #ЕГЭ25

👩‍💻 Код решения:
from fnmatch import *
R = []
for x in range(53191, 10**10, 53191):
if fnmatch(str(x), '?136*'):
if str(x)[0] in '02468' and str(x)[-1] in '13579':
R.append([x, x // 53191])


for i in range(-5, 0):
print(*R[i])


👩‍💻 Комментарии к коду решения:

1⃣ from fnmatch import *
Импорт всех функций из модуля fnmatch для работы с шаблонами и строками.


2⃣ R = []
Создание пустого списка R, куда будут добавляться результаты.


3⃣ for x in range(53191, 10**10, 53191):
Цикл для перебора чисел от 53191 до 10**10 с шагом 53191.


4⃣ if fnmatch(str(x), '?136*'):
Проверка, соответствует ли строковое представление числа x шаблону '?136*'.


5⃣ if str(x)[0] in '02468' and str(x)[-1] in '13579':
Проверка, что первая цифра числа находится в диапазоне '02468', а последняя - в '13579'.


6⃣ R.append([x, x // 53191])
Добавление пары чисел [x, x // 53191] в список R.


7⃣ for i in range(-5, 0):
Цикл для вывода последних пяти элементов списка R.


8⃣ print(*R[i])
Вывод списка элементов с индексами с -5 по -1.


Полный разбор задачи в Notion

#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9554
This media is not supported in your browser
VIEW IN TELEGRAM
2⃣5⃣ Шпаргалка ЕГЭ | Задание #ЕГЭ25 #tpy #шпора

📌 Ссылка на шпаргалку/методичку на Notion и несколько полезных функций уже здесь:

Подготовил для вас методичку по решению 25 задач. Хочу отметить, что это не просто шпаргалка, а скорее пособие, которое поможет вам создать свою собственную "шпору".

В комментариях к этому посту закреплю файл в формате pdf 👇

🚩 Функция проверки на простое число:
def Prost(x):
if x == 1:
return False
for i in range(2, int(x**0.5)+1):
if x % i == 0:
return False
return True


🚩 Функция поиска делителей числа:
def Divisors(x):
div = []
for j in range(1, int(x ** 0.5) + 1):
if x % j == 0:
div += [j, x // j]
return sorted(set(div))


🚩 Пример работы с библиотекой fnmatch:
from fnmatch import * 

for x in range(23, 10 ** 9, 23):
if fnmatch(str(x), '12345?7?8'):
print(x, x//23)


🚩 Проверка числа на палиндром:
x = int(input())
if str(x) == str(x)[::-1]:
print(True)
else:
print(False)


Информатика ЕГЭ | itpy 🧑‍💻
Поддержать автора: boosty 💵
Please open Telegram to view this post
VIEW IN TELEGRAM
👏126611
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера #statgrad по информатике #ЕГЭ25
Автор: Статград
Уровень:
Базовый

🚩 Условие задачи:
Найдите все натуральные числа, не превышающие 10**9, которые
соответствуют маске 4*64*9?7 и при этом без остатка делятся на 9117.
В ответе запишите все найденные числа в порядке возрастания.


👩‍💻 Код решения:
from fnmatch import *
for x in range(9117, 10**9, 9117):
if fnmatch(str(x), '4*64*9?7'):
print(x)

# Ответ:
# 464967
# 41764977
# 406444977
# 436439907
# 464337927
# 464884947


👩‍💻 Комментарии к коду:

1⃣ from fnmatch import *
Импорт всех функций из модуля fnmatch, который предоставляет возможность использовать шаблоны для сравнения строк.


2⃣ for x in range(9117, 10**9, 9117):
Цикл for для переменной x в диапазоне от 9117 до 10^9 с шагом 9117.


3⃣ if fnmatch(str(x), '4*64*9?7'):
Проверка условия: если строковое представление числа x соответствует шаблону '4*64*9?7' с помощью функции fnmatch.


4⃣ print(x)
Вывод числа x, которое удовлетворяет условию проверки шаблона.


Таким образом, приведенный код ищет числа в заданном диапазоне, которые соответствуют шаблону '4*64*9?7', где символ * означает любую последовательность символов, а символ ? означает любой одиночный символ.

#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
7543
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера 315 #kege по информатике #ЕГЭ25
Автор: Е.Джобс
Уровень: Средний


🚩 Условие задачи:
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [326496; 649632], числа, у которых количество четных делителей равно количеству нечетных делителей. При этом в каждой из таких групп делителей не менее 70 элементов. Для каждого найденного числа запишите само число и минимальный делитель, больший 1000.


🚩 Теоретическая справка:
Аудио с пояснением к коду решения оставлю в комментариях.


👩‍💻 Код решения:
def Divisors(x):
div = []
for j in range(1, int(x ** 0.5) + 1):
if x % j == 0:
div += [j, x // j]
return sorted(set(div))


for x in range(326496, 649632+1):
d = Divisors(x)
chet = [a for a in d if a % 2 == 0]
nechet = [a for a in d if a % 2 != 0]
if len(chet) == len(nechet):
if len(chet) >= 70 and len(nechet) >= 70:
print(x, min([a for a in d if a > 1000]))

# Ответ: 315


👩‍💻 Комментарии к коду:

1⃣ def Divisors(x):
Функцию Divisors() комментировать не буду, опишу её постом ниже.


2⃣ for x in range(326496, 649632+1):
Цикл for, который перебирает числа в диапазоне от 326496 до 649632 включительно.


3⃣ d = Divisors(x)
Вызов функции Divisors(x), которая возвращает список делителей числа x.


4⃣ chet = [a for a in d if a % 2 == 0]
Формирование списка chet, содержащего только четные делители числа x.


5⃣ nechet = [a for a in d if a % 2 != 0]
Формирование списка nechet, содержащего только нечетные делители числа x.


6⃣ if len(chet) == len(nechet):
Проверка, равны ли длины списков четных и нечетных делителей числа x.


7⃣ if len(chet) >= 70 and len(nechet) >= 70:
Проверка, имеют ли списки четных и нечетных делителей числа x по крайней мере по 70 элементов.


8⃣ print(x, min([a for a in d if a > 1000]))
Вывод числа x вместе с минимальным делителем, превышающим 1000.


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Поддержать автора донатом 💵
Please open Telegram to view this post
VIEW IN TELEGRAM
1043
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера 9076 #kege по информатике #ЕГЭ25
Автор: А.Богданов
Уровень: Базовый


🚩 Условие задачи:
Найдите все натуральные числа, не превышающие 10**9, которые соответствуют маске 20*23 и при этом без остатка делятся на 2023, а сумма цифр каждого такого числа кратна 7 и меньше 20.


🚩 Теоретическая справка:
Сумму цифр строки можно найти используя: summa = sum(map(int, s))


👩‍💻 Код решения:
from fnmatch import *
for x in range(2023, 10**9, 2023):
if fnmatch(str(x), '20*23'):
summa = sum([int(i) for i in str(x)])
if summa % 7 == 0 and summa < 20:
print(x)

# Ответ:
# 2023
# 204323
# 2025023
# 20232023
# 202302023


👩‍💻 Комментарии к коду:

1⃣ from fnmatch import *
Импорт всех элементов модуля fnmatch. Этот модуль используется для сравнения строк с шаблонами, используя стандартные символы для подстановок.


2⃣ for x in range(2023, 10**9, 2023):
Цикл for, который перебирает числа, начиная от 2023 и до 1000000000 с шагом 2023.


3⃣ if fnmatch(str(x), '20*23'):
Проверка, соответствует ли строковое представление числа x шаблону '20*23'. Это используется для проверки определенного условия на соответствие числа некоторому шаблону.


4⃣ summa = sum([int(i) for i in str(x)])
Вычисление суммы всех цифр в числе x. Для этого строковое представление числа разбивается на отдельные цифры, каждая из которых преобразуется в целое число, после чего вычисляется сумма.


5⃣ if summa % 7 == 0 and summa < 20:
Проверка, делится ли сумма цифр числа x на 7 без остатка и при этом не превышает ли сумма 20.


6⃣ print(x)
Вывод числа x, которое удовлетворяет условиям, описанным выше. Если число соответствует условиям, оно будет выведено.

Информатика ЕГЭ | itpy 🧑‍💻
Поддержать автора донатом 💵
Please open Telegram to view this post
VIEW IN TELEGRAM
1054
🚩🚩 Разбор ДВ #2024 номера #25 по информатике #ЕГЭ25

🚩 Условие задачи:
Напишите программу, которая перебирает целые числа, большие 600 000, в порядке возрастания и ищет среди них такие, среди делителей которых есть хотя бы одно число, оканчивающееся на 7, но не равное 7 и самому числу. Необходимо вывести первые 5 таких чисел, и наименьший делитель, оканчивающийся на 7, не равный 7 и самому числу.
Формат вывода: для каждого из 5 таких найденных чисел в отдельной строке сначала выводится само число, затем  — наименьший делитель, оканчивающийся на 7, не равный 7 и самому числу.


👩‍💻 Код решения:
def divisors(x):
div = []
for j in range(2, int(x ** 0.5) + 1):
if x % j == 0:
div += [j, x // j]
return sorted(set(div))

cnt = 0
for n in range(600001, 10**10):
d = [x for x in divisors(n) if x % 10 == 7 and x != 7]
if len(d) > 0:
print(n, min(d))
cnt += 1
if cnt == 5:
break

# Ответ:
# 600001 437
# 600002 47
# 600003 1227
# 600005 217
# 600012 16667



Информатика ЕГЭ | itpy 🧑‍💻
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
84
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера 17564 #kege по информатике #ЕГЭ25
Автор: Основная волна 08.06.24
Уровень: Средний


🚩 Условие задачи:
Пусть М – сумма минимального и максимального натуральных делителей целого числа, не считая единицы и самого числа.

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

В ответе запишите в первом столбце таблицы первые пять найденных чисел в порядке возрастания, а во втором столбце - соответствующие им значения М.


🚩 Теоретическая справка:
В данной задаче нас просят не учитывать единицы и само число, поэтому диапазон в for j in range(2, int(x ** 0.5) + 1): начинаем с 2.

Кстати про саму функцию divisors() уже был пост.


👩‍💻 Код решения:
def divisors(x):
div = []
for j in range(2, int(x ** 0.5) + 1):
if x % j == 0:
div += [j, x // j]
return sorted(set(div))


k = 0
for x in range(700_001, 10**10):
d = divisors(x)
if len(d) >= 2:
M = min(d) + max(d)
if abs(M) % 10 == 4:
print(x, M)
k += 1
if k == 5:
break

# Ответ:
# 700004 350004
# 700009 41194
# 700023 233344
# 700024 350014
# 700044 350024


👩‍💻 Комментарии к коду:

1⃣ k = 0
Инициализация переменной k, которая будет считать количество найденных чисел.


2⃣ for x in range(700_001, 10**10):
Цикл перебора чисел от 700001 до 10**10.


3⃣ d = divisors(x)
Вызов функции divisors() для нахождения делителей числа x.


4⃣ if len(d) >= 2:
Проверка наличия как минимум двух делителей.


5⃣ M = min(d) + max(d)
Нахождение суммы минимального и максимального делителя числа x.


6⃣ if abs(M) % 10 == 4:
Проверка условия: остаток от деления абсолютной величины суммы делителей M на 10 равен 4.


7⃣ print(x, M)
Вывод числа x и суммы делителей M.


8⃣ k += 1
Увеличение счетчика найденных чисел.


0⃣ if k == 5:
Проверка, достигнут ли лимит в 5 найденных чисел.


🔟 break
Прерывание цикла после нахождения 5 чисел.


Информатика ЕГЭ | itpy 🧑‍💻
Поддержать автора донатом 💵
Please open Telegram to view this post
VIEW IN TELEGRAM
1043
🚩🚩 Разбор ДВ #2024 номера #25 по информатике #ЕГЭ25

👩‍💻 Код решения:
def divisors(x):
div = []
for j in range(1, int(x**0.5)+1):
if x % j == 0:
div += [j, x // j]
return sorted(set(div))


cnt = 0
for x in range(600_000+1, 10**10):
d = [j for j in divisors(x) if j % 10 == 7 and j != 7 and j != x]
if len(d) > 0:
print(x, min(d))
cnt += 1
if cnt == 5:
break


Информатика ЕГЭ | itpy 🧑‍💻
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
944
This media is not supported in your browser
VIEW IN TELEGRAM
🚩🚩 Разбор номера 8960 #kege по информатике #ЕГЭ25
Автор: Е.Джобс
Уровень: Базовый


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

Найдите первые пять чисел, больших 500 000, сумма делителей которых соответствует маске *7?. Найденные числа выведите в порядке возрастания, справа от каждого запишите найденную сумму делителей.


🚩 Теоретическая справка:
Нужно найти первые пять чисел, больших 500 000, сумма делителей которых соответствует маске *7?.


👩‍💻 Код решения:
from fnmatch import *

def divisors(x):
div = []
for j in range(1, int(x**0.5)+1):
if x % j == 0:
div += [j, x // j]
return sorted(set(div))

k = 0
for x in range(500_001, 10**10):
summa = sum(divisors(x))
if fnmatch(str(summa), '*7?'):
print(x, summa)
k += 1
if k == 5:
break

Ответ:
500001 666672
500048 968874
500069 500070
500079 666776
500114 750174



👩‍💻 Комментарии к коду:

1⃣ from fnmatch import *
Импортируется модуль fnmatch.


2⃣ def divisors(x):
Создаем функцию divisors.


3⃣ div = []
Создаётся пустой список div


4⃣ for j in range(1, int(x**0.5)+1):
Запускается цикл for, который проходит по всем числам от 1 до квадратного корня из x (включительно).


5⃣ if x % j == 0:
Проверяется, делится ли число x на j без остатка.


6⃣ div += [j, x // j]
Если j является делителем, то в список div добавляются как сам делитель j, так и результат деления x на j.


7⃣ return sorted(set(div))
Возвращается отсортированный список уникальных делителей.


8⃣ k = 0
Создаем счетчик.


0⃣ for x in range(500_001, 10**10):
Запускается цикл for, который проходит по всем числам от 500,001 до 10^10.


🔟 summa = sum(divisors(x))
Для каждого числа x вычисляется сумма всех его делителей с помощью функции divisors(x), а затем результат сохраняется в переменной summa.


1⃣1⃣ if fnmatch(str(summa), '*7?'):
Проверяется, соответствует ли строка, представляющая сумму делителей.


1⃣2⃣ print(x, summa)
Если условие выше выполняется, то выводится число x и сумма его делителей summa.


1⃣3⃣ k += 1
Увеличивается счётчик k на 1, так как найдено число, удовлетворяющее условию.


1⃣4⃣ if k == 5:
Проверяется, достиг ли счётчик k значения 5.


1⃣5⃣ break
Прерывает выполнение цикла for, если найдено 5 чисел, удовлетворяющих условию.


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Кстати у нас есть чатик
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥97🤯6
🚩🚩 Разбор номера 21422 #kege по информатике #ЕГЭ25
Автор: Досрочная волна 2025
Уровень:
Базовый

🚩 Условие задачи:
Напишите программу, которая перебирает целые числа, бóльшие 1 125 000, в порядке возрастания и ищет среди них такие, у которых
есть натуральный делитель, оканчивающийся на цифру 7 и не равный ни самому числу, ни числу 7. В ответе запишите в первой строке таблицы первые пять найденных чисел в порядке возрастания, а во втором столбце – наименьший делитель для каждого из них, оканчивающийся цифрой 7, не равный ни самому числу, ни числу 7.


🚩 Теоретическая справка:
Относительно базовая задача 25 номера, но надо добавить этот разбор на канал для объективности, так как примеры ФИПИшных задач в списке разборов отсутствуют..


👩‍💻 Код решения:
def divisors(x):
div = []
for j in range(1, int(x**0.5)+1):
if x % j == 0:
div += [j, x // j]
return sorted(set(div))


cnt = 0
for x in range(1_125_000+1, 10**10):
div = [j for j in divisors(x) if j != x and j % 10 == 7 and j != 7]
if len(div) > 0:
print(x, min(div))
cnt += 1
if cnt == 5:
break

Ответ:
1125003 467
1125006 97
1125009 17
1125011 3187
1125012 177

👩‍💻 Комментарии к коду:

1⃣ def divisors(x):
Определение функции divisors, которая находит все делители числа x.


2⃣ div = []
Создание пустого списка для хранения делителей числа x.


3⃣ for j in range(1, int(x*0.5)+1):
Цикл от 1 до квадратного корня из x (оптимизация для поиска делителей).


4⃣ if x % j == 0:
Проверка, является ли j делителем x (если остаток от деления равен 0).


5⃣ div += [j, x // j]
Добавление в список делителей как j, так и x/j (парный делитель).


6⃣ return sorted(set(div))
Возврат отсортированного списка уникальных делителей (set удаляет дубликаты).


7⃣ cnt = 0
Инициализация счетчика найденных чисел.


8⃣ for x in range(1_125_000+1, 10*10):
Цикл по числам от 1_125_001 до 10**10.


0⃣ div = [j for j in divisors(x) if j != x and j % 10 == 7 and j != 7]
Создание списка делителей числа x, которые не равны самому x, оканчиваются на 7 и не равны 7.


1⃣0⃣ if len(div) > 0:
Проверка, есть ли подходящие делители в списке.


1⃣1⃣ print(x, min(div))
Вывод числа x и его минимального подходящего делителя.


1⃣2⃣ cnt += 1
Увеличение счетчика найденных чисел.


1⃣3⃣ if cnt == 5:
Проверка, найдено ли уже 5 чисел.


1⃣4⃣ break
Прерывание цикла, если найдено 5 чисел.


#⃣ Полный список разборов в одном месте

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍4🔥2
🚩🚩 Разбор #ДВ2025 номера #ЕГЭ25 по информатике

🚩 Условие задачи:
Напишите программу, которая перебирает целые числа, бльшие 2 900 000, в порядке возрастания и ищет среди них такие, которые:

имеют ровно два различных натуральных делителя, кроме единицы и самого числа, то есть представляют собой произведение двух различных простых чисел, оба простых множителя содержат в своей записи ровно одну цифру О.

В ответе укажите первые пять таких чисел в порядке возрастания. Во втором столбце таблицы для каждого числа укажите его наибольший простой делитель.


👩‍💻 Код решения:
def divisors(x):
div = []
for j in range(2, int(x**0.5)+1):
if x % j == 0:
div += [j, x // j]
return sorted(set(div))

def Prost(x):
if x == 1:
return False
for i in range(2, int(x**0.5)+1):
if x % i == 0:
return False
return True

cnt = 0
for x in range(2_900_000, 10**10):
div = divisors(x)
if len(div) == 2 and Prost(div[0]) and Prost(div[1]):
if str(div[0]).count('0') == 1 and str(div[1]).count('0') == 1:
print(x, max(div))
cnt += 1
if cnt == 5:
break


#⃣ Разбор задач ДВ, первый день 10.06.25
#⃣ Шпаргалки по всем остальным номерам ЕГЭ

Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤‍🔥44👍2
🚩🚩 Разбор номера 9553 #kege по информатике #ЕГЭ25
Автор: Джобс Е.
Уровень:
Базовый

🚩 Условие задачи:
Назовём маской числа последовательность цифр, в которой также могут встречаться следующие символы:
• символ «?» означает ровно одну нечетную цифру, кратную 3;
• символ «*» означает любую последовательность четных цифр произвольной длины; в том числе «*» может задавать и пустую последовательность.
Например, маске 123*4?5 соответствуют числа 123435 и 12300495. Числа 123425 и 12355435 такой маске не соответствуют.

Найдите все числа, меньшие 109, соответствующие маске 24*68?35 и делящиеся без остатка на 13. В качестве ответа приведите все найденные числа в порядке возрастания, справа от числа укажите результат целочисленного деления его на 13.


👩‍💻 Код решения:
from re import *
for x in range(13, 10**9, 13):
if fullmatch('24[02468]*68[39]35', str(x)):
print(x, x // 13)

Ответ:
24268335 1866795
24868935 1912995
240068335 18466795
240668935 18512995
242668335 18666795
248468935 19112995


👩‍💻 Комментарии к коду:

1⃣ from re import *
- Импорт всех функций из модуля re (регулярные выражения).


2⃣ for x in range(13, 10**9, 13):
- Цикл, перебирающий числа x от 13 до 1 миллиарда с шагом 13 (т.е. все числа, кратные 13).


3⃣ if fullmatch('24[02468]*68[39]35', str(x)):
- Проверяет, соответствует ли строкая запись числа x шаблону:
- 24 – начинается с цифр 24,
- [02468]* – затем любое количество чётных цифр (0, 2, 4, 6, 8),
- 68 – далее идёт 68,
- [39] – после 68 либо 3, либо 9,
- 35 – заканчивается на 35.


4⃣ print(x, x // 13)
- Если число соответствует шаблону, выводит само число и результат деления x на 13.


#⃣ Полный список разборов в одном месте
Информатика ЕГЭ | чатик itpy 🧑‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
❤‍🔥4👍2🔥2