Задание 25 // ЕГЭ по информатике 2024
Vložit
- čas přidán 5. 08. 2024
- Разбираемся с числовой матчастью и поиском делителей.
ОТКРЫТЫЙ КУРС kompege.ru/course
За мат, КАПС, политоту, флуд - перманентный бан.
Связаться с автором: cabanovalexey
Группа ВК ege_info_open
Тренажёр КЕГЭ: kompege.ru
--------------------------------------------------------------------------------------------
Ссылки на каналы других годных преподавателей:
Евгений Джобс
/ @evgenijjobs
Информатик БУ
/ @infbu
Alex Danov
/ alexdanov
Андрей Рогов
/ devinf74
Ботай каждый день, глупый дурачок
/ @toadharvard
Таймкоды
00:00 Приветствие
02:10 Как искать делители числа
31:05 Делители числа 1
37:30 Делители числа 2
44:40 Делители числа 3
55:10 Делители числа 4
01:00:40 Делители числа 5
01:09:30 Как копировать ответы в станцию
01:11:50 Делители числа 6
01:16:35 Делители числа 7
01:24:35 Фильтрация делителей 1
01:33:40 Фильтрация делителей 2
01:37:50 Фильтрация делителей 3
01:44:00 Как определять простоту числа
01:51:35 Простые числа 1
01:55:15 Простые числа 2
02:01:00 Простые числа 3
02:06:45 Простые числа 4
02:13:20 Основная теорема арифметики
02:19:20 ОТА 1
02:26:25 ОТА 2
02:32:05 ОТА 3
02:36:40 ОТА 4
02:41:00 Окончание и напутствия
Алексей, ГИГАНТСКОЕ Вам СПАСИБО!!! Вы такой молодец! Все очень ясно, просто, понятно. Главное, только нужное, никакой лишней воды и дуратских имён переменных!!!
Так держать!!! Смотрю многих. Вы явный ФАВОРИТ.
а какие имена переменных дурацкие? если тут из одной буквы, то у кого-то из 0 букв? имена переменных наоборот лучше распространять максимально, чтобы можно было легко понять
Первый стрим, во время которого начал тупить) ОТА определённо крутая вещь, но задачи с ней - это просто нечто) Надо больше их порешать. Спасибо за информацию!
Алексей, БОЛЬШОЕ СПАСИБО за Ваш гигантский труд!
спидран делителей перед егэ
Броооу
Спасибо, это КРУТО!)
Алексей, спасибо за прекрасное обьяснение. ЭТО БАЗА
Спасибо большое! С Вами результаты всё выше и выше!
Алексей, спасибо вам большое за разбор!! Разобрала за день до экзамена и на экзамене попалось 25 на делители и сумму, благодаря вам смогла решить
Алексей, спасибо большое! Наконец-то понял ОТА)))
Крутой разбор, спасибо!
ОТА это обалденно! Действительно интересная штука, особенно последняя задача
Спасибо, Алексей)
ота сложна для понимания, так как наконец-то что-то интересное в егэ по инфе, но такой кайф, когда ее понял...
спасибо большооооое!!!!!
Спасибо!!!
Спасибо вам!
Спасибо
Это основа, это база
спасибо
на ОТА я немного поплыл, а так все круто :)
ота база
что такое ОТА?
@@dmitrydeff8364 основная теорема арифметики
@@dmitrydeff8364 основная теорема арифметики
ЛУЧШИЙ!
На ОТА кокнуло
а это что?
1:43:09 А в задаче же сказано, что среди делителей есть число, оканчивающееся на 8 и тп. Но это же не обязательно все числа? Можете как-то поподробнее объяснить пожалуйста?
А можно проверить простоту чисел таким образом?:
d = div(d)
if len(d)==2 and 1 in d: (то есть у нас делители 1 и само число)
Вернет тру или фолс или еще что-нибудь
спс
Алексей, ГИГАНТСКОЕ Вам СПАСИБО!!! Вы такой молодец! Все очень ясно, просто, понятно. Главное, только нужное, никакой лишней воды и дуратских имён переменных!!!
Так держать!!! Смотрю многих. Вы явный ФАВОРИТ😄😁😆🤣😂🙂🙃😑😋😛😛😒😒🤑🤑🤑🤑😝
🤣🤣🤣🤣🤣🤣😅😅😅😅😅😅😅😅😛😛😛😛😛😛😪😪😪😪😪😪😍😍😍😍😍😍
🤭🤫🤧🤗😝😝🤭🥲😋😛😑😵💫🥴🥵😎🤕🤕🤒🤒😴😴😜🤪😜🤪
😌😜🤕🤗🤮😷@@sakamoto6014
спидран делителей перед егээ, ееееееееее
По поводу нахождения простоты числа, можно же просто указать в условии предыдущей функции, что если длина строки d == 2, то это простое число?
Можно и так
1:48:25 - Где лучше нарешивать ЕГЭ?
Зашел сюда, потому что увидел в 1 дне 2024 года делители, вместо масок...
Вот алгоритм поиска делителей быстрее
def getDivs(N):
factors = {1}
maxP = int(N ** 0.5)
p, inc = 2, 1
while p 1:
factors.update([f * N for f in factors])
return sorted(factors)
Тест скорости:
from timeit import timeit
N = 1010101 ** 2
print(timeit(lambda: getDivs(N), number=100)) # 0.0017
print(timeit(lambda: div(N), number=100)) # 8.3578283
ужас
интересный алгоритм, спасибо! но для экзамена конечно это чересчур
Сейчас в спешке изучаю последние задачи. Можете пожалуйста подсказать стоит ли сейчас учить ОТА? Дорешал до 19 задачи в домашке и поплыл конкретно. Вот теперь и думаю стоит ли столько времени сейчас тратить на ОТА
Я думаю нет
2:05:00 можно же не проверять, что простых делителей три, если они в произведении дают число, то значит их в любом случае три, 1 же не простое, иначе бы не хватило слагаемых в произведении
2**2 * 3**2 * 5**2
Простых делителей три но их произведение не равно числу.
Почему в функции div мы получаем список делителей, у нас же множество было? Или это sorted возвращает список, даже если ему множество дать как аргумент?
sorted возвращает список.
Алексей, подскажите, сколько по новой метрике дают за каждое задание первичных?
1-25 по 1 баллу; 26 и 27 по 2 балла
Не знаю и никто не знает )
41:11 а нельзя сделать просто if len(dev)==5: (то печатать, по сути же если чисел 5, то 1 и последнее это единица и само это число)?
Можно, но местами такое чревато
Спасибо большое
Здравствуйте! Почему на 2:28:52 приравниваем число всех делителей к трём, если кроме этих четных делителей есть ещё единица? она не входит в число всех делителей? Просто на 2:21:37 вы учитываете кроме нетривиальных делителей еще единицу и само число, а здесь - нет
Это фигня.. Я вот не вдупляю как он ловко заменяет (a1+1), на а1
Здравствуйте, Алексей. Помогите пожалуйста разобраться с 178 заданием. Тайм код : 1:43:21
От нас по условию требуют найти делители, среди которых есть число оканчивающееся на 8. То есть, среди делителей есть хотя бы одно число, которое оканчивается на 8. Но дальше, в решении, в генераторе, вы ставите такое условие (i%10==8), что отсеивает из списка делителей все, которые не оканчиваются на 8. Почему так? Разве из-за этого не теряются другие числа из этого списка? Нам же не говорят, что все числа должны оканчиваться на 8, а только то, что в списке есть такое число. Объясните пожалуйста, я похоже не понимаю условия.
А так же ещё один момент в условии мне непонятен: ... при этом делитель не равен 8 и самому числу. Что значит самому числу? Я не понимаю эту запись.
1) Мы находим делители числа и фильтруем только те которые оканчиваются на 8. Смысл в том, что если у числа нет таких делителей, список будет пустой. А если они есть то список будет ненулевой длины. Именно такие числа мы ищем.
2) Например число 500008 не считается, так как у него только один подходящий делитель само число )
Понял, благодарю за объяснение.
2:40:00 Почему мы увеличиваем степень тройки, вместо двойки? Если увеличить степень двойки число увеличится в 4 раза, а так в 9
Потому что тогда 512 делителей не получится
Какой доской вы пользуетесь?
Open Board
1:37:00 почему мы не учитываем, что в задаче написано, что для числа 36 учитываются только 12 и 18? получается же тогда ренж с двойки должен начинаться
1 и само число отфильтруются, так как они не двузначные
@@kompege спасибо ❤️
for j in range(193136, 193223 + 1): print(j) if len(sorted({b for i in range(1, int(j**0.5)+1) for b in {i, j//i} if j%b==0})) == 6 else "" - первое задание в одну строчку
В этом году на ДВ было вот такое задание 1:37:50
почему мы не прибавляем единицу к степени двойки на 2:27:45 ? в принципе понятно, что прибавляем к остальным на уровне, потому что "оно работает" и "ответ получается верным"(
+1 это вариант делителя с нулевой степенью простого числа. Мы считаем чётные делители, потому в них должна быть ненулевая степень двойки
@@kompege поняла, спасибо!!
Прощу прощения, а разве на 1:43 . В строчке из под def ...: for i in range( ... )
" ... " здесь не должно быть 1, нам же не сказано, что мы срезаем первый и последний делитель)
1 не подходит под условие
само число тоже
Алексей, хотелось бы узнать как и где научиттся решать примеры 25 задач с масками
В группе ВК есть видеоразборы задач
@@kompege о, благодарю
Спидран делителей перед ЕГЭ
Здравствуйте, а почему второй по величине делитель - корень из x, у нас же делители: 2, 2p, 2p²
время момента: 2:31:30
Нетривиальные делители 2, p, 2p, p**2
Второй по величине это p
1:30:00 а можно ускорить процесс как-нибудь? просто в задаче отрезок миллион
В конце видео показано как ))
ОТА дается с трудом, но когда осознаешь её - получаешь интеллектуальный оргазм
1:26:30 Что сложного написать такой код??
def div(x):
d = set()
for i in range(1,int(x**0.5)+1):
if x%i==0:
if i%2==0:
d.add(i)
if (x//i)%2==0:
d.add(x//i)
return sorted(d)
ничего сложного нет, но зачем изменять этот код, если можно гораздо легче и быстрее изменить результат этого кода с помощью генератора? вы когда делаете что-то, не лезете в библиотеку, чтобы поменять код под ваш особый случай
Алексей сказал хорошие слова по этому поводу на 1:54:37
Вот вариант функции на поиск делителей реально в одну строчку и без set comprehension
div = lambda n: sorted(i for x in range (2,int(n**0.5)+1) if n%x==0 for i in {x,n//x})
Стрим актуальный?
Актуальный )
Алексей, почему в 146 задании вы называете корень из x вторым по величине делителем?
Имеем делители 1, 2, p, p**2, 2p**2
Нетривиальные 2, p, p**2
Второй по величине это p, как раз корень.
@@kompege Может быть, я что-то не понял, но разве 2p не является тоже делителем?
почему в задаче 146 у вас второй нетривиальный делитель нечетный, хотя по условию все три должны быть четные)
А если у нас второй делитель четный,то получается что у нас уже 4 нетривиальных делителей, потому как у второго числа появится пара(делитель "4"),что за приколы, у задачи нет решения
2:22:45
Зачем нам множество, если у нас и так по парам делители и мы идём до корня, то есть найдем просто все пары. Это для случая квадрата, когда у нас пара из двух одинаковых чисел?
да
Алексей, почему в последней задаче на простые числа, при поиске делителей мы не учитываем единицу? Если её учитывать, то ответ будет такой:
450001 1
450002 225001
450004 225002
450006 225003
450007 26471
450008 225004
Я считаю, что это правильный ответ, так как у 450001 единица это наибольший делитель, не равный самому числу, который не является простым числом.
Единица это не простое число
@@kompege Так в условии и сказано, что наибольший делитель не должен являться простым числом, поэтому единица подходит.
@@genichionifyol4741 почитайте пример в этой задаче пожалуйста
Здравствуйте, 1:58:21 не могу понять почему p(i), а не p(x)
x это число получается число из диапазона 650000+
i это делитель числа x (потому что цикл for i in div(x) перебирает делители)
@@kompege , получается мы оставляем i для i в делителях числа, если числа в этом делители простые? Я правильно понял?
@@user-gy5kd8jx4f создаётся список из делителей числа x, которые проходят проверку простоты (простые делители x короче)
@@kompege спасибо большое,понял
я прозрел
День до игэ я учу ота
привет, как сдал?
Тошнит от умников в чате, не дай бог таким же стать
До егэ 4 месяца
страшна...
@@catgo_cat очень
егэ прошел
@@relie0105 ура
У меня у одного комп не вывозит миллионные итерации в цикле?
Да, у одного
Алексей добрый вечер, остановился на Простых числах. И не очень понимаю зачем делать новую функцию. Ведь старая вполне справляется с простыми числами.def f(n):
d = set()
for i in range(2, int (n**0.5) + 1):
if n % i == 0:
d.add(i)
d.add(n//i)
return sorted(d)
for i in range(4202865, 4202923 + 1):
d = f(i)
if not d:
print(i)
можно и так иногда )