Автор: Джобс Е.
Уровень: Базовый
Назовём нетривиальным делителем натурального числа его делитель, не равный единице и самому числу. Найдите все натуральные числа, принадлежащие отрезку [106732567; 152673836] и имеющие ровно три нетривиальных делителя. Для каждого найденного числа запишите в ответе само число и его наибольший нетривиальный делитель. Найденные числа расположите в порядке возрастания.
Например, для числа 2018 имеем следующие делители 2 и 1009. Поэтому результатом (не принимая во внимание количества делителей) будет пара чисел 2018 1009.
def divisors(x):
div = []
for j in range(2, int(x**0.5)+1):
if x % j == 0:
div.append(j)
div.append(x // j)
return sorted(set(div))
for x in range(106732567, 152673836+1):
if (x**0.5).is_integer():
d = divisors(x)
if len(d) == 3:
print(x, max(d))
Ответ:
112550881 1092727
131079601 1225043
141158161 1295029
def divisors(x):
- Объявление функции divisors, которая принимает число x и возвращает его делители.
div = []
- Создание пустого списка div для хранения делителей.
for j in range(2, int(x**0.5)+1):
- Цикл по возможным делителям от 2 до квадратного корня из x (включительно).
if x % j == 0:
- Проверка, делится ли x на j без остатка.
div.append(j)
- Если j - делитель, добавляем его в список.
div.append(x // j)
- Добавляем парный делитель (x разделить на j).
return sorted(set(div))
- Возвращаем отсортированный список уникальных делителей.
for x in range(106732567, 152673836+1):
- Основной цикл по числам от 106732567 до 152673836 включительно.
if (x**0.5).is_integer():
- Проверка, является ли x полным квадратом (квадратный корень - целое число).
d = divisors(x)
- Если x - полный квадрат, находим все его делители.
if len(d) == 3:
- Проверяем, что у числа ровно 3 делителя (не считая 1 и само число).
print(x, max(d))
- Если условие выполняется, выводим число и его наибольший делитель.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4❤🔥2🔥1
.env
, и зачем он нужен? #tpyЕсли вы когда-либо работали с проектами на
Python
, Node.js
или других языках, то, скорее всего, сталкивались с файлами .env
. Но что они из себя представляют?В нем хранятся важные настройки: ключи API, пароли, настройки базы данных и другие конфиденциальные данные.
🔒 Почему это удобно?
- Безопасность: секретные данные не хранятся прямо в коде, их легко исключить из системы контроля версий.
- Гибкость: можно легко менять настройки между разными окружениями - тестовым, продакшеном и локальной разработкой.
- Удобство: все важные переменные сосредоточены в одном месте, их легко найти и обновить.
.env
- это безопасный способ хранения конфиденциальной информации, если он используется локально и не попадает в публичные источники.⚠️ Ведь его публичное размещение - серьёзная уязвимость!
Please open Telegram to view this post
VIEW IN TELEGRAM
2❤4❤🔥2🔥2
17799
#kege по информатике #ЕГЭ8Автор: В. Зарянкин
Уровень: Средний
Все четырёхбуквенные слова, в составе которых могут быть только русские буквы А, Р, Г, У, М, Е, Н, Т, записаны в алфавитном порядке и пронумерованы начиная с 1.
Вот начало списка:
1. АААА
2. АААГ
3. АААЕ
4. АААМ
5. АААН
...
Под каким номером в списке идёт последнее слово, в котором все буквы различны и все символы располагаются в алфавитном порядке?
from itertools import *
s = sorted('АРГУМЕНТ')
for n, p in enumerate(product(s, repeat=4), 1):
word = ''.join(p)
if len(word) == len(set(word)):
if list(word) == sorted(word):
print(n)
Ответ: 2424
from itertools import *
- Импорт всех функций из модуля itertools (в данном случае используется product)
s = sorted('АРГУМЕНТ')
- Создание отсортированного списка букв из слова "АРГУМЕНТ": ['А', 'Г', 'Е', 'М', 'Н', 'Р', 'Т', 'У']
for n, p in enumerate(product(s, repeat=4), 1):
- Цикл по всем возможным комбинациям букв длиной 4 (с повторами)
- product(s, repeat=4) генерирует декартово произведение списка s на себя 4 раза
- enumerate добавляет нумерацию, начиная с 1
word = ''.join(p)
- Объединение кортежа p в строку (слово из 4 букв)
if len(word) == len(set(word)):
- Проверка, что все буквы в слове уникальны (длина слова равна длине множества его букв)
if list(word) == sorted(word):
- Проверка, что буквы в слове идут в алфавитном порядке (слово равно своему отсортированному варианту)
print(n)
- Если оба условия выполнены, выводится номер текущей комбинации
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥3❤1👍1
Примеры кодов для задач 9, 17, 24, 26, 27 из ЕГЭ:
for M in open('9.txt'):
M = [int(i) for i in M.split()]
print(M)
M = [int(i) for i in open('17.txt')]
print(M)
s = open('24.txt').readline()
Считываем только первую строку файла.
ans = []
for M in open('26.txt'):
M = [int(i) for i in M.split()]
ans.append(M)
Сохраняем каждую строку как список чисел, а потом собираем всё в общий список.
f = open('27.А.txt').readlines()[1:]
for M in f:
M = [float(i.replace(',','.')) for i in M.split()]
x, y = M[0], M[1]
print(x, y)
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍5❤3❤🔥2🔥2
Автор: Яндекс учебник
Уровень: Средний
Определите количество строк таблицы, содержащих числа, для которых выполнены все условия:
1. Четыре числа строки можно разбить на две пары чисел с равными суммами
2. Максимальное число строки меньше суммы трёх оставшихся чисел сумма чисел в строке чётна
from itertools import permutations
cnt = 0
for s in open('0. files/9.csv'):
M = [int(x) for x in s.split(';')]
if sum(M) % 2 == 0:
if max(M) < sum(M) - max(M):
if any(p[0] + p[1] == p[2] + p[3] for p in permutations(M)):
cnt += 1
print(cnt)
Ответ: 139
· Импортируем функцию permutations для генерации всех перестановок
· Создаем счетчик и инициализируем его нулем
· Открываем файл '9.csv' и построчно читаем его
· Разбиваем строку по символу ';' и преобразуем каждый элемент в целое число
· Проверяем, что сумма всех чисел в строке четная
· Проверяем, что максимальное число меньше суммы всех остальных чисел
· Проверяем, существует ли такая перестановка 4 чисел, где сумма первых двух равна сумме последних двух
· Если все три условия выполнены, увеличиваем счетчик на 1
· Выводим итоговое количество строк, удовлетворяющих всем условиям
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥4🔥1
📎 list - это изменяемый упорядоченный список. Можно добавлять, удалять, менять элементы. Например:
fruits = ['яблоко', 'банан', 'апельсин']📎 📎 tuple - неизменяемая последовательность. Отлично подходит, когда нужно зафиксировать набор данных:
coordinates = (10, 20)📎 📎 set - множество уникальных элементов. Быстро искать, удалять дубликаты:
unique_numbers = {1, 2, 3}📎 📎 dict - словарь, отображение ключей на значения. Очень удобно для хранения пар "ключ-значение":
person = {'имя': 'Анна', 'возраст': 25}📎 ❄️ frozenset - неизменяемое множество, его нельзя менять после создания. Используется там, где нужен "жёсткий" набор данных. frozenset([1, 2, 3, 4])➡️ frozenset({1, 2, 3, 4})🔼 🔽 deque - двусторонняя очередь из модуля collections. Быстро добавлять и удалять элементы с обоих концов:
from collections import deque⚙️ d = deque() - инициализировать элементами из любого итерируемого объекта (список, кортеж и т. д.).
Технологии телеграмма не стоят на месте, поэтому обращаю ваше внимание, что мы часто используем инструмент "цитата". Кликайте на цитату выше, чтобы открыть текст для чтения
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3❤🔥3🔥1
Автор: О. Лысенков
Уровень: Средний
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится восьмеричная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если восьмеричная запись начинается на 5, то все двойки в записи меняются на единицы, а все единицы меняются на двойки после к числу приписывается 11 слева;
б) если восьмеричная запись начинается не на 5, то к записи справа приписывается 10, а первый разряд полученной записи заменяется на 2.
Укажите максимальное число N, для которого результатом работы алгоритма является наибольшее число R, меньшее 1354.
L = []
for n in range(1, 10000):
s = f'{n:o}' # s = oct(n)[2:]
if s[0] == '5':
s = s.replace('2', '*')
s = s.replace('1', '2')
s = s.replace('*', '1')
s = '11' + s
else:
s = s + '10'
s = '2' + s[1:] # а первый разряд полученной записи заменяется на 2.
r = int(s, 8)
if r < 1354:
L.append((r, n))
print(max(L))
Ответ: 61
· Создаем пустой список для хранения пар (результат, исходное число)
· Перебираем числа n от 1 до 9999
· Преобразуем число n в восьмеричную систему счисления (без префикса '0o')
· Проверяем, начинается ли восьмеричная запись с цифры 5
· Временно заменяем все цифры 2 на символ '*' (чтобы избежать конфликта при следующих заменах)
· Заменяем все цифры 1 на 2
· Заменяем временные символы '*' обратно на 1 (фактически меняем местами 1 и 2)
· Добавляем в начало строки две единицы '11'
· Если восьмеричная запись НЕ начинается с 5
· Добавляем в конец строки '10'
· Заменяем первую цифру полученной строки на 2
· Преобразуем полученную строку s обратно в десятичное число, интерпретируя ее как восьмеричную
· Проверяем, что результат r меньше 1354
· Добавляем в список пару (результат r, исходное число n)
· Находим и выводим максимальную пару в списке (сравнение происходит сначала по r, затем по n)
Please open Telegram to view this post
VIEW IN TELEGRAM
2❤🔥2❤1🔥1