Автор: Основная волна 11.06.25
Уровень: Средний
Пусть М - сумма минимального и максимального простых натуральных делителей целого числа, не считая самого числа.
Напишите программу, которая перебирает целые числа, большие 5 400 000, в порядке возрастания и ищет среди них такие, для которых М больше 60 000 и является палиндромом, т.е. одинаково читается слева направо и справа налево.
В ответе запишите в первом столбце
таблицы первые пять найденных чисел в порядке возрастания, а во втором столбце - соответствующие им значения М.
def prime(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 d(x):
a=[]
for i in range(2, int(x**0.5)+1):
if x%i==0:
a+=[i, x//i]
return sorted(set(a))
k=0
for i in range(5400001, 10**10):
a=[j for j in d(i) if prime(j) == True]
if len(a)>0:
M=min(a)+max(a)
if M>60000:
if str(M)[::-1] == str(M):
print(i, M)
k += 1
if k==5:
break
Ответ:
5400042 900009
5400420 90009
5400866 158851
5406116 1351531
5406420 90109
· Объявление функции для проверки, является ли число простым
· Проверяем, если число меньше или равно 1
· Числа ≤ 1 не являются простыми
· Перебираем возможные делители от 2 до квадратного корня из x
· Проверяем, делится ли x на i без остатка
· Если нашли делитель, число не простое
· Если делителей не найдено, число простое
· Объявление функции для нахождения всех делителей числа x
· Создаем пустой список для делителей
· Перебираем числа от 2 до квадратного корня из x
· Проверяем, является ли i делителем x
· Добавляем в список сам делитель i и парный ему делитель x//i
· Возвращаем отсортированный список уникальных делителей
· Счетчик найденных чисел
· Бесконечный цикл начиная с 5 400 001
· Создаем список простых делителей числа i
· Проверяем, что есть хотя бы один простой делитель
· Вычисляем M как сумму минимального и максимального простого делителя
· Проверяем, что M больше 60 000
· Проверяем, является ли M палиндромом (читается одинаково в обе стороны)
· Выводим число i и значение M
· Увеличиваем счетчик найденных чисел
· Проверяем, найдено ли уже 5 чисел
· Прерываем цикл после нахождения 5 подходящих чисел
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥6🔥3❤2👍1
Python
можно посчитать Евклидово расстояние между двумя точками всего в одну строку?) #tpydist
, которая входит в стандартную библиотеку math
.В контексте 27 задачи ЕГЭ, особенно полезная вещь!!)
import math
point1 = (x1, y1)
point2 = (x2, y2)
distance = math.dist(point1, point2)
print(distance)
- Простая и удобная в использовании.
- Работает для точек в 2D, 3D и более измерениях.
⚠️ math.dist() доступна только в Python 3.8 и новее.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤🔥3🔥2
Автор: Яндекс учебник
Уровень: Базовый
Значение арифметического выражения
625**90 + 125**120 − 5*25
записали в системе счисления с основанием 25.
Для найденного выражения вычислите сумму его чётных цифр.
alp = sorted('0123456789QWERTYUIOPASDFGHJKLZXCVBNM')
def convert(n, b):
r = ''
while n > 0:
r = alp[n % b] + r
n //= b
return r
n = 625**90+125**120 - 5*25
s = convert(n, 25)
print(sum([int(x, 25) for x in s if x in alp[0::2]]))
Ответ: 4292
· Создаем отсортированный список символов для систем счисления (цифры 0-9 и буквы A-Z)
· Объявление функции convert для перевода числа n в систему счисления с основанием b
· Создаем пустую строку для хранения результата
· Цикл выполняется, пока число n больше 0
· Берем остаток от деления n на b, находим соответствующий символ в alp и добавляем его в начало строки
· Делим n на b нацело (убираем обработанный разряд)
· Возвращаем полученную строку - число в системе счисления с основанием b
· Вычисляем большое число n по заданной формуле
· Переводим число n в 25-ричную систему счисления
· alp[0::2] выбирает только символы с четными индексами (0, 2, 4, ...)
· Для каждого символа в строке s, если он есть в alp[0::2], преобразуем его обратно в число
· Суммируем все такие числа и выводим результат
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥2
- переменные, операторы, функции, базовые типы данных
- арифметика, логика, побитовые операции, приведение типов
-
if
, elif
, else
, вложенные условия, тернарный оператор-
for
, while
, вложенные циклы, break
, continue
, pass
, else
- операции, методы, форматирование (
f'
-строки, format()
, %
), срезы- методы, вложенные списки, особенности кортежей
- отличия от списков, методы, практика
- объявление, вызов,
return
- чтение, запись, практика
-
map()
, filter()
, zip()
, enumerate()
-
itertools
, math
, random
, ipaddress
, fnmatch
и др.- Обработка исключений, декораторы, алгоритмы (DBSCAN, K-means, Евклид), lambda-функции
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥4❤2🔥2
23205
#КЕГЭ по информатике #ЕГЭ23Автор: Основная волна 10.06.25
Уровень: Базовый
У исполнителя есть три команды, которые обозначены латинскими буквами:
A. Вычесть 1
B. Вычесть 2
C. Найти целую часть от деления на 3
Сколько существует программ, для которых при исходном числе 19 результатом является число 4, при этом траектория вычислений содержит число 6 и не содержит 13?
def F(a, b):
if a <= b or a == 13:
return a == b
return F(a-1, b) + F(a-2, b) + F(a//3, b)
print(F(19, 6) * F(6, 4))
Ответ: 212
· Объявление рекурсивной функции F с двумя параметрами a и b
· Проверяем условие остановки: если a ≤ b или a равно 13
· Если условие выше выполнено, возвращаем True только если a равно b, иначе False
· Рекурсивно вызываем функцию F для трех случаев: a-1, a-2 и a//3 (целочисленное деление)
· Суммируем результаты всех трех вызовов
· Вычисляем произведение F(19, 6) и F(6, 4)
· Выводим результат
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4❤🔥2🔥2
range(10**9)
почти не занимает памяти? #tpyrange()
хранит только начальное, конечное значения и шаг. Он не создает список всех чисел сразу, а генерирует числа по мере необходимости!
range(10**9)
в памяти хранится лишь небольшая информация: - старт (по умолчанию 0)
- финиш (10^9)
- шаг (по умолчанию 1)
Please open Telegram to view this post
VIEW IN TELEGRAM
2❤8👍2🔥2
Автор: Основная волна 10.06.25
Уровень: Базовый
Определите количество пар последовательности, в которых только один из элементов является трёхзначным числом, a сумма элементов пары кратна минимальному трёхзначному элементу последовательности, оканчивающемуся на 7. В ответе запишите количество найденных пар, затем минимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности.
M = [int(x) for x in open('17.txt')]
A = [x for x in M if len(str(abs(x))) == 3]
B = [x for x in A if abs(x) % 10 == 7]
R = []
for i in range(len(M)-1):
x, y = M[i], M[i+1]
if (x in A) + (y in A) == 1:
if (x + y) % min(B) == 0:
R.append(x + y)
print(len(R), min(R))
Ответ: 9 107
· Читаем файл '17.txt', преобразуем каждую строку в целое число и создаем список M
· Создаем список A из чисел M, которые являются трехзначными (учитываем модуль для отрицательных)
· Создаем список B из чисел A, которые оканчиваются на 7 (учитываем модуль для отрицательных)
· Создаем пустой список R для хранения сумм пар, удовлетворяющих условиям
· Перебираем индексы i от 0 до предпоследнего элемента списка M
· Присваиваем x текущий элемент M[i], y - следующий элемент M[i+1]
· Проверяем, что только один из двух элементов (x или y) является трехзначным числом
· Проверяем, что сумма пары x+y делится нацело на минимальное число из списка B
· Если оба условия выполнены, добавляем сумму пары в список R
· Выводим количество найденных пар и минимальную сумму среди этих пар
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥5🔥1
Python
! #tpy
🆘 # (... может каких то еще, вроде ток эти две )
🆘
1️⃣ upper() - переводит строку в верхний регистр.
"hello".upper() → "HELLO"2️⃣ lower() - переводит строку в нижний регистр.
"HELLO".lower() → "hello"3️⃣ capitalize() - делает первую букву заглавной.
"hello".capitalize() → "Hello"4️⃣ title() - каждое слово с заглавной буквы.
"hello world".title() → "Hello World"5️⃣ strip() - удаляет пробелы с обоих концов.
"hello".strip() → "hello"6️⃣ lstrip() / rstrip() - удаляет пробелы слева/справа.7️⃣ replace(old, new) - заменяет подстроку.
"abc".replace("a", "x") → "xbc"8️⃣ split(sep) - разбивает строку по разделителю.
"a,b,c".split(",") → ["a", "b", "c"]0⃣ join(list) - собирает строку из списка.
",".join(["a", "b", "c"]) → "a,b,c"🔟 startswith(str) / endswith(str) - проверяет начало/конец строки.
"hello".startswith("he") → True1️⃣ 1️⃣ find(sub) - ищет подстроку и возвращает индекс.
"hello".find("ll") → 21️⃣ 2️⃣ count(sub) - считает количество вхождений.
"hello".count("l") → 21️⃣ 3️⃣ isdigit() - проверяет, состоит ли строка из цифр.
"123".isdigit() → True1️⃣ 4️⃣ isalpha() - проверяет, только ли буквы.
"abc".isalpha() → True1️⃣ 5️⃣ isalnum() - буквы или цифры без пробелов.
"a1".isalnum() → True1️⃣ 6️⃣ islower() / isupper() - проверяет регистр.1️⃣ 7️⃣ zfill(width) - дополняет нулями слева.
"7".zfill(3) → "007"1️⃣ 8️⃣ format() - подставляет значения в строку.
"{}".format(5) → "5"1️⃣ 0⃣ f-строки (Python 3.6+) - удобный формат.
f"{5}" → "5"2️⃣ 0️⃣ in – проверка наличия подстроки.
"a" in "abc" → True
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥5🔥1
Автор: Основная волна 10.06.25
Уровень: Базовый
В терминологии сетей TCP/IP маской сети называют двоичное число, которое показывает, какая часть IP-адреса узла сети относится к адресу сети, а какая – к адресу узла в этой сети. Адрес сети получается в результате применения поразрядной конъюнкции к заданному адресу узла и его маске.
Широковещательным адресом называется специализированный адрес, в котором на месте нулей в маске стоят единицы. Адрес сети и широковещательный адрес не могут быть использованы для адресации сетевых устройств.
Сеть задана IP-адресом одного из входящих в неё узлов 45.172.106.203 и сетевой маской 255.255.252.0.
Найдите наибольший в данной сети IP-адрес, который может быть назначен компьютеру. В ответе укажите найденный IP-адрес без разделителей.
Например, если бы найденный адрес был равен 111.22.3.44, то в ответе следовало бы записать 11122344
from ipaddress import *
net = ip_network("45.172.106.203/255.255.252.0", 0)
for ip in net.hosts():
print(ip)
Ответ: 45172107254
· Импортируем все функции и классы из модуля ipaddress для работы с IP-адресами и сетями
· Создаем объект сети на основе IP-адреса 45.172.106.203 и маски 255.255.252.0
· Аргумент 0 означает, что не нужно проверять корректность адреса относительно маски
· Перебираем все хосты (адреса) в созданной сети, исключая адрес сети и широковещательный адрес
· Выводим каждый IP-адрес хоста из сети
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🫡1
.index()
в Python
#tpyВы когда-нибудь сталкивались с задачей - найти позицию элемента в списке или строке? Тогда метод
.index()
- то что вам нужно).index()
? fruits = ['киви', 'банан', 'груша', 'банан', 'виноград']
pos = fruits.index('банан')
print(pos) # Выведет: 1
-
.index()
ищет 'банан'
и возвращает его первую позицию - 1
⚠️ Важно: если элемента в последовательности нет - .index() вызовет ошибку ValueError.
Чтобы избежать этого, можно воспользоваться оператором in для проверки, на наличие элемента.🔥 Совет:
Для поиска всех вхождений элемента — используйте цикл или генератор, а .index() отлично подходит для быстрого определения первой позиции.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥4👍1🔥1
Автор: Основная волна 10.06.25
Уровень: Базовый
На предприятии каждой изготовленной детали присваивают серийный номер, состоящий из 172 символов. В базе данных каждый серийный номер занимает одинаковое и минимально возможное число байт. При этом используется посимвольное кодирование серийных номеров, все символы кодируются одинаковым и минимально возможным числом бит. Известно, что для хранения 356 984 серийных номеров потребовалось не менее 54 Мбайт памяти. Определите минимально возможную мощность алфавита, используемого для записи серийных номеров. В ответе запишите только целое число.
from math import *
for alf in range(1, 10000):
bit = ceil(log2(alf))
byte = ceil(172 * bit / 8)
if 356984 * byte >= 54 * 1024 * 1024:
print(alf)
break
Ответ: 129
· Импортируем все функции из модуля math, включая log2 и ceil
· Перебираем значения alf от 1 до 9999 (ищем минимальное подходящее значение)
· Вычисляем минимальное количество бит, необходимое для кодирования одного символа алфавита размером alf
· Вычисляем размер одного пароля в байтах: 172 символа × бит на символ ÷ 8 бит в байте
· Проверяем, что общий размер 356984 паролей превышает или равен 54 МБ (54 × 1024 × 1024 байт)
· Выводим найденное значение размера алфавита
· Прерываем цикл после нахождения первого подходящего значения (минимального alf)
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍1🔥1
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
🔥 ЕГЭ по информатике - 18 и 19 июня
по остальным датам:
Полное расписание ЕГЭ 2026:
1 июня
-- история, литература, химия
4 июня
-- русский язык
8 июня
-- математика (базовый и профильный уровни)
11 июня
-- обществознание, физика
15 июня
-- биология, география, иностранные языки
(письменная часть)
18 и 19 июня
-- информатика и иностранные языки
(устная часть)
22–25 июня
- пересдача любых предметов
8 и 9 июля
- можно по желанию пересдать один из предметов
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥4👍1🔥1
pip install
и что происходит, когда вы вводите эту команду 0⃣ Ищет пакет - первым делом он обращается к Python Package Index (PyPI) или другим источникам, которые вы указали.
1⃣ Загружает нужную версию - выбирает подходящий релиз и скачивает его на ваш компьютер.
2⃣ Устанавливает зависимости - если пакет зависит от других библиотек, то pip автоматически их тоже скачает и установит.
3⃣ Распаковывает и устанавливает - файл распаковывается, а код - либо C-расширения - компилируются, либо Python-модуль сразу попадает в ваше окружение (обычно в site-packages).
Все установленные пакеты регистрируются в метаданных - так
pip
знает, что у вас есть, и может управлять зависимостями, обновлять или удалять их. Можно указать свой собственный репозиторий или даже установить пакет прямо из Git, архива или локальной папки — для этого есть специальные параметры, такие как --index-url.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥4👍1🔥1