This media is not supported in your browser
VIEW IN TELEGRAM
Интересная задача 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))
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥9 5🔥4
#kege #yandex
#reshu #statgrad
#polyakov
#ЕГЭ1 #ЕГЭ10 #ЕГЭ19
#ЕГЭ2 #ЕГЭ11 #ЕГЭ20
#ЕГЭ3 #ЕГЭ12 #ЕГЭ21
#ЕГЭ4 #ЕГЭ13 #ЕГЭ22
#ЕГЭ5 #ЕГЭ14 #ЕГЭ23
#ЕГЭ6 #ЕГЭ15 #ЕГЭ24
#ЕГЭ7 #ЕГЭ16 #ЕГЭ25
#ЕГЭ8 #ЕГЭ17 #ЕГЭ26
#ЕГЭ9 #ЕГЭ18 #ЕГЭ27
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
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])
from fnmatch import * Импорт всех функций из модуля fnmatch для работы с шаблонами и строками.
R = [] Создание пустого списка R, куда будут добавляться результаты.
for x in range(53191, 10**10, 53191): Цикл для перебора чисел от 53191 до 10**10 с шагом 53191.
if fnmatch(str(x), '?136*'): Проверка, соответствует ли строковое представление числа x шаблону '?136*'.
if str(x)[0] in '02468' and str(x)[-1] in '13579': Проверка, что первая цифра числа находится в диапазоне '02468', а последняя - в '13579'.
R.append([x, x // 53191]) Добавление пары чисел [x, x // 53191] в список R.
for i in range(-5, 0): Цикл для вывода последних пяти элементов списка R.
print(*R[i]) Вывод списка элементов с индексами с -5 по -1.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9 5 5 4
This media is not supported in your browser
VIEW IN TELEGRAM
Подготовил для вас методичку по решению 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))
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
👏12 6 6 1 1
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Статград
Уровень: Базовый
Найдите все натуральные числа, не превышающие 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
from fnmatch import *Импорт всех функций из модуля fnmatch, который предоставляет возможность использовать шаблоны для сравнения строк.
for x in range(9117, 10**9, 9117):Цикл for для переменной x в диапазоне от 9117 до 10^9 с шагом 9117.
if fnmatch(str(x), '4*64*9?7'):Проверка условия: если строковое представление числа x соответствует шаблону '4*64*9?7' с помощью функции fnmatch.
print(x)Вывод числа x, которое удовлетворяет условию проверки шаблона.
Таким образом, приведенный код ищет числа в заданном диапазоне, которые соответствуют шаблону '4*64*9?7', где символ
* означает любую последовательность символов, а символ ? означает любой одиночный символ.Тут отвечают на вопросы
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: Е.Джобс
Уровень: Средний
Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку [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
def Divisors(x):Функцию Divisors() комментировать не буду, опишу её постом ниже.
for x in range(326496, 649632+1):Цикл for, который перебирает числа в диапазоне от 326496 до 649632 включительно.
d = Divisors(x)Вызов функции Divisors(x), которая возвращает список делителей числа x.
chet = [a for a in d if a % 2 == 0]Формирование списка chet, содержащего только четные делители числа x.
nechet = [a for a in d if a % 2 != 0]Формирование списка nechet, содержащего только нечетные делители числа x.
if len(chet) == len(nechet):Проверка, равны ли длины списков четных и нечетных делителей числа x.
if len(chet) >= 70 and len(nechet) >= 70:Проверка, имеют ли списки четных и нечетных делителей числа x по крайней мере по 70 элементов.
print(x, min([a for a in d if a > 1000]))Вывод числа x вместе с минимальным делителем, превышающим 1000.
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Автор: А.Богданов
Уровень: Базовый
Найдите все натуральные числа, не превышающие 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
from fnmatch import *Импорт всех элементов модуля fnmatch. Этот модуль используется для сравнения строк с шаблонами, используя стандартные символы для подстановок.
for x in range(2023, 10**9, 2023):Цикл for, который перебирает числа, начиная от 2023 и до 1000000000 с шагом 2023.
if fnmatch(str(x), '20*23'):Проверка, соответствует ли строковое представление числа x шаблону '20*23'. Это используется для проверки определенного условия на соответствие числа некоторому шаблону.
summa = sum([int(i) for i in str(x)])Вычисление суммы всех цифр в числе x. Для этого строковое представление числа разбивается на отдельные цифры, каждая из которых преобразуется в целое число, после чего вычисляется сумма.
if summa % 7 == 0 and summa < 20:Проверка, делится ли сумма цифр числа x на 7 без остатка и при этом не превышает ли сумма 20.
print(x)Вывод числа x, которое удовлетворяет условиям, описанным выше. Если число соответствует условиям, оно будет выведено.
Информатика ЕГЭ | itpy
Поддержать автора донатом
Please open Telegram to view this post
VIEW IN TELEGRAM
Напишите программу, которая перебирает целые числа, большие 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
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
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
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
from fnmatch import *Импортируется модуль fnmatch.
def divisors(x):Создаем функцию divisors.
div = []Создаётся пустой список div
for j in range(1, int(x**0.5)+1):Запускается цикл for, который проходит по всем числам от 1 до квадратного корня из x (включительно).
if x % j == 0:Проверяется, делится ли число x на j без остатка.
div += [j, x // j]Если j является делителем, то в список div добавляются как сам делитель j, так и результат деления x на j.
return sorted(set(div))Возвращается отсортированный список уникальных делителей.
k = 0Создаем счетчик.
for x in range(500_001, 10**10):
Запускается цикл for, который проходит по всем числам от 500,001 до 10^10.
summa = sum(divisors(x))Для каждого числа x вычисляется сумма всех его делителей с помощью функции divisors(x), а затем результат сохраняется в переменной summa.
if fnmatch(str(summa), '*7?'):Проверяется, соответствует ли строка, представляющая сумму делителей.
print(x, summa)Если условие выше выполняется, то выводится число x и сумма его делителей summa.
k += 1Увеличивается счётчик k на 1, так как найдено число, удовлетворяющее условию.
if k == 5:Проверяется, достиг ли счётчик k значения 5.
breakПрерывает выполнение цикла for, если найдено 5 чисел, удовлетворяющих условию.
Кстати у нас есть чатик
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥9 7🤯6
Автор: Досрочная волна 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
def divisors(x):Определение функции divisors, которая находит все делители числа x.
div = []Создание пустого списка для хранения делителей числа x.
for j in range(1, int(x*0.5)+1):Цикл от 1 до квадратного корня из x (оптимизация для поиска делителей).
if x % j == 0:Проверка, является ли j делителем x (если остаток от деления равен 0).
div += [j, x // j]Добавление в список делителей как j, так и x/j (парный делитель).
return sorted(set(div))Возврат отсортированного списка уникальных делителей (set удаляет дубликаты).
cnt = 0Инициализация счетчика найденных чисел.
for x in range(1_125_000+1, 10*10):Цикл по числам от 1_125_001 до 10**10.
div = [j for j in divisors(x) if j != x and j % 10 == 7 and j != 7]Создание списка делителей числа x, которые не равны самому x, оканчиваются на 7 и не равны 7.
if len(div) > 0:Проверка, есть ли подходящие делители в списке.
print(x, min(div))Вывод числа x и его минимального подходящего делителя.
cnt += 1Увеличение счетчика найденных чисел.
if cnt == 5:Проверка, найдено ли уже 5 чисел.
breakПрерывание цикла, если найдено 5 чисел.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍4🔥2
Напишите программу, которая перебирает целые числа, бльшие 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
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤🔥4❤4👍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
from re import * - Импорт всех функций из модуля re (регулярные выражения).
for x in range(13, 10**9, 13): - Цикл, перебирающий числа x от 13 до 1 миллиарда с шагом 13 (т.е. все числа, кратные 13).
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.
print(x, x // 13) - Если число соответствует шаблону, выводит само число и результат деления x на 13.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤🔥14👍12🔥5
Автор: Джобс Е.
Уровень: Базовый
Назовём нетривиальным делителем натурального числа его делитель, не равный единице и самому числу. Найдите все натуральные числа, принадлежащие отрезку [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
❤5❤🔥3🔥2
Автор: Основная волна 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🔥3👍1