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
❤🔥4👍2🔥2