This media is not supported in your browser
VIEW IN TELEGRAM
В мире математики делители числа имеют важное значение, и в Python можно легко создать функцию, которая найдет все делители данного числа. Давайте рассмотрим функцию divisors(x):
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))
divisors(x)
принимает один аргумент x
, который является целым числом, для которого мы ищем делители.int(x ** 0.5) + 1
проходимся по всем числам от 1 до квадратного корня из x
.j
является делителем x
(то есть x % j == 0
), то мы добавляем j
и x // j
в список делителей div
, так как x // j
это сомножитель числа j
.▪️Вызов
divisors(24)
вернет [1, 2, 3, 4, 6, 8, 12, 24]
, так как делители числа 24 - это все числа от 1 до 24, которые делят это число без остатка.▪️Вызов
divisors(16)
вернет [1, 2, 4, 8, 16]
, поскольку делители числа 16 - это числа, которые можно поделить на 16, начиная с 1 и заканчивая самим 16.Информатика ЕГЭ | itpy
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Основная волна 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
k = 0
Инициализация переменной k, которая будет считать количество найденных чисел.
for x in range(700_001, 10**10):
Цикл перебора чисел от 700001 до 10**10.
d = divisors(x)
Вызов функции divisors() для нахождения делителей числа x.
if len(d) >= 2:
Проверка наличия как минимум двух делителей.
M = min(d) + max(d)
Нахождение суммы минимального и максимального делителя числа x.
if abs(M) % 10 == 4:
Проверка условия: остаток от деления абсолютной величины суммы делителей M на 10 равен 4.
print(x, M)
Вывод числа x и суммы делителей M.
k += 1
Увеличение счетчика найденных чисел.
if k == 5:
Проверка, достигнут ли лимит в 5 найденных чисел.
break
Прерывание цикла после нахождения 5 чисел.
Информатика ЕГЭ | itpy
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
В Python импорт модулей - это важный аспект, который позволяет использовать функциональность, определенную в других файлах, в своем коде. Этот подход делает программирование более организованным, уменьшает дублирование кода и упрощает совместную разработку.
При импорте модулей в Python вы можете использовать различные подходы, такие как:
1. Импорт всего модуля:
import module_name
2. Импорт конкретного объекта из модуля:
from module_name import object_name
3. Импорт модуля с псевдонимом:
import module_name as alias
Примеры использования импорта модулей:
# Импорт модуля math
import math
print(math.sqrt(16)) # Выведет 4.0
# Импорт функции randint из модуля random
from random import randint
print(randint(1, 10)) # Выведет случайное число от 1 до 10
# Импорт модуля datetime с псевдонимом dt
import datetime as dt
print(dt.datetime.now()) # Выведет текущую дату и время
Подробнее о импорте модулей в Python вы можете прочитать в данной статье на Notion, а также следите за интересными материалами в моём канале.
Информатика ЕГЭ | itpy
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
Что выведет этот код? 🤔
1️⃣
2️⃣
3️⃣
Информатика ЕГЭ | itpy 👨💻
Поддержать автора донатом 💵
1️⃣
Произойдет ошибка
2️⃣
0,9
3️⃣
(0, 3, 0, 3, 0, 3)
Информатика ЕГЭ | itpy 👨💻
Поддержать автора донатом 💵
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Основная волна 07.06.24
Уровень: Базовый
На числовой прямой даны два отрезка: P=[15;40] и Q=[21;63].
Укажите наименьшую возможную длину такого отрезка A, для которого логическое выражение (x∈P)→(((x∈Q)∧¬(x∈A))→¬(x∈P)) истинно (т.е. принимает значение 1) при любом значении переменной х.
def F(x, a1, a2):
P = 15 <= x <= 40
Q = 21 <= x <= 63
A = a1 <= x <= a2
return P <= ((Q and (not A)) <= (not P))
R = []
M = [x / 4 for x in range(5 * 4, 80 * 4)]
for a1 in M:
for a2 in M:
if all(F(x, a1, a2) for x in M):
R.append(a2 - a1)
print(round(min(R)))
# Ответ: 19
def F(x, a1, a2):
Определение функции F с параметрами x, a1 и a2.
P = 15 <= x <= 40
Проверка условия нахождения x в интервале от 15 до 40.
Q = 21 <= x <= 63
Проверка условия нахождения x в интервале от 21 до 63.
A = a1 <= x <= a2
Проверка условия нахождения x в интервале между a1 и a2.
return P <= ((Q and (not A)) <= (not P))
Возвращение результата выражения, описывающего взаимосвязь между P, Q, и A.
R = []
Инициализация пустого списка R, в который будут сохраняться значения.
M = [x / 4 for x in range(5 * 4, 80 * 4)]
Создание списка M с числами, равными x / 4, где x изменяется от 20 до 320 с шагом 1.
for a1 in M:
Цикл перебора значений из списка M для переменной a1.
for a2 in M:
Вложенный цикл перебора значений из списка M для переменной a2.
if all(F(x, a1, a2) for x in M):
Проверка условия с помощью функции F для всех значений x из списка M.
R.append(a2 - a1)
Добавление разности a2 - a1 в список R.
print(round(min(R)))
Вывод минимального значения из списка R после округления.
Информатика ЕГЭ | itpy
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Работа с файлами в Python - это важный аспект программирования, позволяющий читать, записывать и обрабатывать данные в файлах.
В данной статье мы рассмотрим основные методы и приемы, которые помогут вам в ваших работах.
А в следующем посту рассмотрим несколько примеров открытия файлов с ЕГЭ.
file = open("example.txt", "r") # Открываем файл example.txt на чтение
content = file.read()
print(content)
file = open("example.txt", "r") # Открытие файла для чтения
for line in file:
print(line.strip())
file.close()
Информатика ЕГЭ | itpy
Please open Telegram to view this post
VIEW IN TELEGRAM
from itertools import *
alphabet = sorted('0123456789QWERTYUIOPASDFGHJKLZXCVBNM')
cnt = 0
for per in product(alphabet[:17], repeat=5):
w = ''.join(per)
if w[0] != '0':
if w.count('3') == 1:
if len([x for x in w if x > 'C']) <= 3:
cnt += 1
print(cnt)
Информатика ЕГЭ | itpy
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
def G(n, b):
r = ''
while n > 0:
r = str(n % b) + r
n //= b
return r
R = []
for x in range(1, 2030+1):
num = 6**2030 + 6**100 - x
s = G(num, 6)
R.append([s.count('0'), x])
print(max(R))
R = []
for x in range(1, 2030+1):
num = 6**2030 + 6**100 - x
s = ''
while num > 0:
s = str(num % 6) + s
num //= 6
R.append([s.count('0'), x])
print(max(R))
Информатика ЕГЭ | itpy
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
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
R = []
for n in range(1, 1000):
s = f'{n:b}' # s = bin(n)[2:]
if n % 2 == 0:
s = s + '10'
else:
s = '1' + s + '01'
r = int(s, 2)
if n < 11:
R.append(r)
print(min(R))
Информатика ЕГЭ | itpy
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
a = 2 # – Стерео
b = 72000 # – Частота дискретизации
# c = ? – Битовое разрешение
t = 28 * 60 + 40 # – Общая длительность 17 треков
bit_all = 14_680_064 * 380
print(bit_all) # 5578424320 – бит
bit = bit_all - 17 * 308 * 2**13 # – Кбайт перевожу в бит (для 17 треков)
c = bit / (a * b * t)
print(c) # 22.34952...
Информатика ЕГЭ | itpy
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
import sys
sys.setrecursionlimit(10000)
def F(n):
if n == 1:
return 1
if n > 1:
return (n - 1) * F(n - 1)
print((2*F(2024) - F(2023)) / F(2022))
Информатика ЕГЭ | itpy
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
def F(a, b):
if a >= b:
return a == b
return F(a+1, b) + F(a+2, b) + F(a+3, b)
print(F(3, 9) * F(9, 13))
Информатика ЕГЭ | itpy
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
M = [int(x) for x in open('17.txt')]
D = [x for x in M if x > 0]
R = []
for i in range(len(M)-1):
x, y = M[i], M[i+1]
if x < 0 or y < 0:
if x + y % min(D) == 0:
R.append(x + y)
print(len(R), max(R))
Информатика ЕГЭ | itpy
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
cnt = 0
for s in open('9.csv'):
M = [int(x) for x in s.split(';')]
copied = [x for x in M if M.count(x) == 2]
not_copied = [x for x in M if M.count(x) == 1]
if len(copied) == 4 and len(not_copied) == 2:
if sum(copied) < sum(not_copied):
cnt += 1
print(cnt)
Информатика ЕГЭ | itpy
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
def F(x, y):
return (x + y <= 26) or (y <= x - 4) or (y >= A)
for A in range(1000):
if all(F(x, y) for x in range(100) for y in range(100)):
print(A)
Информатика ЕГЭ | itpy
Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
Использование метода форматирования строк
.format()
в Python является широко распространенным способом работы со строками. Однако, с появлением f-строк (f-strings)
в Python 3.6, разработчики получили удобный и современный способ форматирования строк.f-строки позволяют встраивать значения переменных непосредственно в строку без необходимости использования метода
.format()
. Это делает код более читаемым, компактным и удобным для использования. user = "Андрей"
action = "покупка"
log_message = f'Пользователь {user} зашел на сайт и выполнил действие: {action}'
print(log_message)
# Пользователь Андрей зашел на сайт и выполнил действие: покупка
В данном коде мы использовали префикс f перед строкой, а затем в фигурных скобках указали переменные, которые хотим вставить в строку. Python автоматически подставит значения этих переменных при формировании строки.
Информатика ЕГЭ | itpy
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Основная волна 19.06.24
Уровень: Базовый
Определите, какова сумма протяжённостей дорог из пункта F в пункт B и из пункта E в пункт D.
Данный код позволяет нам в универсальном случае определить последовательность вершин графа. И если знаем вершины, то не сложно найти длины и сумму длин!
from itertools import permutations
table = '12 15 16 21 23 24 32 36 37 42 47 51 56 61 63 65 73 74'
graph = 'AB BA AF FA FB BF FE EF BD DB ED DE EC CE DG GD CG GC'
for per in permutations('ABCDEFG'):
new_table = table
for i in range(1, 7+1):
new_table = new_table.replace(str(i), per[i-1])
if set(new_table.split()) == set(graph.split()):
print('1 2 3 4 5 6 7')
print(*per)
# 1 2 3 4 5 6 7
# B D E G A F C
# FB = 53, ED = 2, => 55
# 1 2 3 4 5 6 7
# F E D C A B G
# ED = 53, FB = 2, => 55
from itertools import permutations
Импортируем функцию permutations из модуля itertools для генерации всех возможных перестановок элементов.
table = '12 15 16 21 23 24 32 36 37 42 47 51 56 61 63 65 73 74'
Определяем строку 'table', представляющую набор чисел, разделенных пробелами, которые описывают соединения в графе.
graph = 'AB BA AF FA FB BF FE EF BD DB ED DE EC CE DG GD CG GC'
Определяем строку 'graph', которая описывает возможные связи между буквами A, B, C, D, E, F, G в графе.
for per in permutations('ABCDEFG'):
Запускаем цикл, перебирающий все возможные перестановки букв A, B, C, D, E, F, G.
new_table = table
Создаем копию строки 'table', чтобы постепенно заменять числа на соответствующие буквы из текущей перестановки.
for i in range(1, 7 + 1):
Запускаем вложенный цикл, который проходит по всем числам от 1 до 7.
new_table = new_table.replace(str(i), per[i - 1])
Заменяем каждое число в 'new_table' на соответствующую букву из текущей перестановки 'per', используя индексы.
if set(new_table.split()) == set(graph.split()):
Проверяем, совпадает ли множество уникальных элементов в 'new_table' с множеством уникальных элементов в 'graph'.
print('1 2 3 4 5 6 7')
Если множества совпадают, выводим строку '1 2 3 4 5 6 7', что означает, что найдено подходящее соответствие.
print(*per)
Печатаем текущее соответствие букв из перестановки, используя распаковку для форматированного вывода.
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
Всем хороших выходных! 👋
Я вернулся из отпуска (затишья), который был мне очень нужен после всей этой канители с экзаменами и пересдачами.. В планах радовать вас постоянным контентом: новыми разборами задач, короткими видео, шпаргалками, статьями про Python и новыми курсами. Да-да, все это время мы работали над созданием полезных материалов для вас.
Главной нашей целью до конца лета является создание бесплатного курса "Питон для успешной сдачи ЕГЭ". Будем считать, что это анонс!😅
Я вернулся из отпуска (затишья), который был мне очень нужен после всей этой канители с экзаменами и пересдачами.. В планах радовать вас постоянным контентом: новыми разборами задач, короткими видео, шпаргалками, статьями про Python и новыми курсами. Да-да, все это время мы работали над созданием полезных материалов для вас.
Главной нашей целью до конца лета является создание бесплатного курса "Питон для успешной сдачи ЕГЭ". Будем считать, что это анонс!
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Е. Джобс
Уровень: Средний
Автомат обрабатывает натуральное число N > 1 по следующему алгоритму:
1. Строится двоичная запись числа N.
2. В записи последний ноль заменяется на первые две цифры в полученной записи.
3. Запись записывается справа налево (в обратную сторону).
4. Полученное двоичное число переводится в десятичную систему счисления.
Для какого максимального значения в результате работы алгоритма получится число 119?
Про возможность обрабатывать исключения try я писал в этом посте.
R = []
for n in range(2, 1000):
s = f'{n:b}'
try:
m = s.rindex('0')
s = s[:m] + s[:2] + s[m+1:]
s = s[::-1]
r = int(s, 2)
if r == 119:
R.append(n)
except Exception as E:
print(s, E)
print(max(R))
# Ответ: 58
R = []
Создаем пустой список R для хранения чисел, которые будут соответствовать заданным условиям.
for n in range(2, 1000):
Запускаем цикл, перебирающий числа от 2 до 999 включительно.
s = f'{n:b}'
Преобразуем текущее число n в строку, содержащую его двоичное представление.
try:
Начинаем блок try для обработки возможных исключений в последующем коде.
m = s.rindex('0')
Находим индекс последнего вхождения символа '0' в строке s.
s = s[:m] + s[:2] + s[m+1:]
Формируем новую строку: оставляем часть до последнего '0', вставляем первые два символа исходной строки и добавляем оставшуюся часть исходной строки после последнего '0'.
s = s[::-1]
Переворачиваем строку s задом наперед.
r = int(s, 2)
Преобразуем строку s обратно в целое число из двоичной системы счисления.
if r == 119:
Проверяем, равно ли получившееся число 119.
R.append(n)
Если условие верно, добавляем исходное число n в список R.
except Exception as E:
Обрабатываем возможные исключения, которые могут возникнуть в блоке try.
print(s, E)
В случае исключения выводим текущую строку s и описание ошибки E.
print(max(R))
Выводим максимальное число из списка R.
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM