20 Цикл while Алгоритм Евклида Python
🔥🔥🔥 Инди-курс по Python 🔥🔥🔥
stepik.org/course/63085/promo
👉👉👉 Свой вопрос по курсу можешь задать в чате
t.me/+SlnNhAO7caBlNDM6
👉👉👉 Также подписывайся на мой телеграмм-канал
t.me/python_egoroff
egoroffartem.pythonanywhere.co...
Узнаем как с помощью цикла while найти НОД ( Наибольший общий делитель).
Наибольший общий делитель (НОД) - это число, которое делит без остатка два числа и делится само без остатка на любой другой делитель данных двух чисел. Проще говоря, это самое большое число, на которое можно без остатка разделить два числа, для которых ищется НОД.
Для этого нам понадобится реализовать алгоритм Евклида.
Алгоритм Евклида - это алгоритм нахождения наибольшего общего делителя (НОД) пары целых чисел.
Задача НОД
acmp.ru/asp/do/index.asp?main=...
Задача НОК
acmp.ru/asp/do/index.asp?main=...
egoroffartem.pythonanywhere.co...
Подробная информация об этом уроке
Все видео этого курса можете найти на сайте
egoroffartem.pythonanywhere.co...
или в Вк
videos-177962775?secti...
Если кому нужна помощь, предлагаю индивидуальные занятия. Подробнее пишите в личку в вк
artem_egoroff
python.study
В данном группе можете найти информацию о новых видео и задать вопросы
Пікірлер: 149
🫵 Теория без практики - ничто, поэтому 👇 🐍 stepik.org/course/63085/promo 👉 специально для тебя создал бесплатный топовый курс по Python 👉 В нем тебя ждет: 📗 более 400 практических заданий на программирование 📗 более 250 тестовых заданий на проверку материала 📗 десятки часов видеоматерилов по теории 📗 видеоразборы решения заданий 📗 текстовые материалы по урокам, примеры кода 📗 доступ к закрытому чату с дружественной обстановкой 📗 сертификат в случае успешного прохождения курса
Спасибо за урок! Как же я кайфую от каждого вашего урока!
Объяснение очень понятное, огромное спасибо!
0:22 искать наибольший общий делитель 1:28 алгоритм1 Евклида 3:20 пример 5:03 map 5:37 алгоритм2 8:48 пример2 10:30 алгоритм
так все понятно, просто супер))
Очень классно! Всё понятно.
Спасибо, очень интересно
Отличный курс! У автора и проффесиональные навыки программирования и навыки преподавания! Будет ли курс по Tkinter?
спасибо, очень выручил. В проекте пригодилось.
Отличный курс! Соединил алгоритм Евклида с обходом чисел )
Спасибо!
Thanks Спасиба
Спасибо огромное помогли
@egoroffchannel
5 жыл бұрын
это хорошо)
Мощно
Артём, благодарю! Отличный урок! 🔥🔥🔥👍
Небольшая подсказка. Если хотите решить с помощью a,b = b, a%b, то создайте отдельную переменную для a*b
Супер доступно объясняешь! А Swift не юзаешь?
@egoroffchannel
4 жыл бұрын
спасибо. нет, swift не использую
👏
ввел a,b = map(int,input().split()) while a!=b: if a>b: a=a-b else: b=b-a print("По Евклиду") print(a) а получил при вооде это 7 Traceback (most recent call last): File "C:\python\uroki\evklid_while.py", line 12, in a,b = map(int,input().split()) ValueError: not enough values to unpack (expected 2, got 1)
нахождение НОК a,b=map(int, input().split()) d,k=a,b while b>0: a,b=b, a%b nok=d*k/a print(int(nok))
@yureache32432
3 жыл бұрын
Не роботаеь
Я буду тут каждый день. День 9.4 Только сйечас дотукался что это больше для егэ и прочих экзаменов нежели чем для рядового программиста
Попутно с этими уроками учу матан)
апельсины:n=int(input()) m=int(input()) a=n*m b=m while m>0: n,m=m,n%m print(n) c=a/n #c общее кол.долек(nok) #z кол.долек в одном апельсине z=c/b print(z) как то так)))
a,b=map(int,input().split()) while a!=b: a,b=max(a,b),min(a,b) a=a-b print(a)
удачи
Моё решение НОК: a,b=map(int,input().split()) c = a*b while b>0: a,b = b,a%b print(c/a)
Охерел от того что алгоритм Евклида можно реализовать в одну-две строки
Эпическая игра только с синтаксисом из этого и прошлых уроков a, b, n = map(int,input().split()) i, noda, nodb = 1, 0, 0 while (noda 0: b1, n1, = n1, b1%n1 nodb = b1 n -= nodb i *= -1 if i == 1: print(1) else: print(0)
Эпическая игра. import math a,b,n = map(int,input().split()) khodov=0 while n>0: n=n-math.gcd(a,n) a,b = b,a khodov=khodov+1 if khodov%2==0: print(1) else: print(0) В примечании к задаче нам намекают на использование матовского gcd(x,y). Так получается менее громоздкий код.
@user-mp7ff8mu4b
4 жыл бұрын
что то крутилось в голове но незнание math.gcd стало фатальным
@user-qs8kq2sq3s
3 жыл бұрын
а без модуля можно решить эту задачу циклом while? я не понимаю как менять НОД для двух чисел в цикле.
@balamski7954
3 жыл бұрын
ух, 8 месяцев назад. что-то я забросил совсем учёбу(
@user-qs8kq2sq3s
3 жыл бұрын
@@balamski7954 возвращайся!
@balamski7954
3 жыл бұрын
@@user-qs8kq2sq3s я постараюсь, обещаю
Вопросов нет, мастер.
как сайт называется ? благодарю
Функция map принимает два аргумента 1) функцию 2) итерируемый объект (коллекция).Получается к обьекту можно присоединять методы и map не выдаст ошибку?
@dimondsafkage4620
Жыл бұрын
Да, спокойно, т.к. методы - это те же функции, правда, не вижу смысла от этого, т.к. в таком случае мы вообще работаем с экземпляром класса, хотя подобное наверняка может и пригодиться
b=int(input()) a=int(input()) while b!=a: if b%a==0 : break if a%b==0: break if a>b: a=a-b if b>a: b=b-a if b%a==0: print('Наибольший общий делитель',a) if a%b==0: print('Наибольший общий делитель',b) else : print('Наибольший общий делитель',b) вот это называется усложнил код
if a > b: a -= b else: a,b = b,a ; возможен такой вариант?
a, b = map(int, input().split()) y = a * b while b > 0: a, b = b, a % b print(a, y/a)
Второй способ сделанный по примеру 7:35 на мой взгляд довольно сложный и непонятный. Я всегда перед тем,как автор после озвученной задачи показывает как её решить,пытаюсь сначала решить её сам и по примеру 6:23 у меня получился вроде работающий способ,который мне кажется проще: a=int(input()) b=int(input()) if a%b==0: print(b) elif b%a==0: print(a) else: print(max(a,b)%min(a,b)) Записывается он может и длиннее,но лично мне в нём всё сразу понятно почему что и как,а в этом 9:17 способе нет. Моим же способом тоже можно пользоваться?
@user-gs9wv5pg1j
2 жыл бұрын
попытайтесь найти нод(7,17)
@axe_effect
2 жыл бұрын
Я тоже стараюсь раньше решить, у меня вот так получилось: a = int(input('Введите первое число ')) b = int(input('Введите второе число ')) if a>b: while b>0: a,b = b,a%b else: while a>0: a,b = b%a,a print('Общий делитель равен ', max(a, b)) Правда, я из урока взять реализацию по остатку из деления
Задачка - Эпическая игра если кому интересно, (без функций решить не получилось) a,b,c=map(int,input().split()) def node(first,second): while second>0: first,second=second,first%second return first while c>0: semen=node(a,c) c=c-semen if c==0: print('0') break asemen=node(b,c) c=c-asemen if c
НОК: a, b = map(int, input().split()) p = a * b while b: a, b = b, a%b print(p // a)
@alex_pure
2 жыл бұрын
Апельсины: n, m = map(int, input().split()) n1 = n if n > m: n, m = m, n while m: n, m = m, n%m print(n1//n) или так: n, m = map(int, input().split()) n1 = n if n > m: while n: m, n = n, m%n print(n1//m) else: while m: n, m = m, n%m print(n1//n)
@alex_pure
2 жыл бұрын
Эпическая игра: a, b, n = map(int, input().split()) count = 0 while n > 0: if count%2 != 0: m, n2 = b, n else: m, n2 = a, n while m: n2, m = m, n2%m n -= n2 count += 1 if count%2 != 0: print(0) else: print(1)
Знал о Алгоритме Евклида ток из фоллаута
Спасибо за урок! Подскажите, почему мы в а кладем б, а в б кладем а? В примере , где 100 и 3, мы же так не делали... Спасибо
@maltamagistro
2 жыл бұрын
Потому шо, если этого не слелать, то придется 3%100
Здравствуйте! Артём, есть сложность как ввести в цикл while формулу НОК? Проблема не только в этой задаче. Мы заменяем переменные и таким образом вывести первоначальные значения a и b не можем.
@egoroffchannel
5 жыл бұрын
добрый вечер. Нок находится вне цикла после нахождения НОДа
@user-zy4ti3eh3g
5 жыл бұрын
@@egoroffchannel Правильно ли я понимаю, после того как мы присвоили переменным a и b переменные b и a%b, мы не можем использовать переменные a и b в формуле?
@kreved52
5 жыл бұрын
@@user-zy4ti3eh3g просто перед циклом сделай так c = a * b и после цикла раздешиль с//a, что и будет НОК
@josephjostar4826
2 жыл бұрын
@@user-zy4ti3eh3g до того как найти нод,можно записать а*б в отдельную переменную
Здравствуйте, Для чего применяется функция map? Со split вроде как понятно, она разделяет введенную строку через пробел(по умолчанию)
@egoroffchannel
5 жыл бұрын
привет. В ближайшее время выйдет видео по этой функции.
@gustavofrink5746
5 жыл бұрын
egoroff_channel Спасибо, ждём!
@funeshow8202
5 жыл бұрын
@@egoroffchannel хочу сказать вам спасибо за такой интересный курс!
@Glavny_po_vsemu
3 жыл бұрын
@@egoroffchannel вот без таких мелочей польза от урока сводится к нулю ! Разжевывать надо.
Интересно, а какое практическое применение может быть у НОД?
@user-iy6vk4pn1j
4 жыл бұрын
задача "апельсин" на информатиксе
a, b = map(int, input().split()) while (a and b)!= 0: my_list = [a, b] a, b = max(my_list) % min(my_list), min(my_list) print(max(a, b))
НОК с помощью последнего уравнения вычислить не получается я посмотрел в интернете, и для написания программы использовали try и def
@sergeikrasnovskii9767
4 жыл бұрын
У нас получается что бы найти НОК, нам надо числа "А" и "В" перемножить и разделить на НОД, который мы уже умеем находить. Таким образом формула выглядит так А*В/НОД Вот два примера: Пример №1 a,b= map(int,input('Enter a b:').split()) c=a*b while a != b: if a > b: a = a - b else: b = b - a print(c//a) Пример №2 a, b = map(int, input('a b :').split()) z=a*b while b > 0: c = a % b a = b b = c print(z//a) Огромное спасибо автору Артему за просто уникальные видео уроки!!!
@user-ug1rn4ki6j
4 жыл бұрын
@@sergeikrasnovskii9767 , а если написать так? a,b=map(int,input().split()) n=a m=b while b>0: c=a%b a=b b=c d=(n*m)/a print(d)
@SchResonance
4 жыл бұрын
@@user-ug1rn4ki6j Я тоже так сделал. Но Сергей прямо топчик предложил. Еще и // чтобы от флоата избавиться) У меня так получилось a=int(input()) b=int(input()) m=a n=b while b>0: a,b=b,a%b print (m*n/a)
До того как посмотреть видео я попробовал сам составить программу, вот что вышло a = int(input()) b = int(input()) a1 = [] b1 = [] c = 0 v = 1 p = 0 p1 = 1 l = [] if a>b: while c if a%v ==0: a1.insert(0 ,v) if b%v ==0: b1.insert(0 , v) c = c+1 v = v+1 q = len(b1) + 1 a1 = a1[::-1] b1 = b1[::-1] d = a1+b1 d = sorted(d) w = len(d)-1 while w > 0: if d[p]==d[p1]: l.insert(0, d[p]) p = p+1 p1 = p1+1 w = w-1 print(max(l)) elif b>a: while c if a % v == 0: a1.insert(0, v) if b % v == 0: b1.insert(0, v) c = c + 1 v = v + 1 q = len(a1) + 1 a1 = a1[::-1] b1 = b1[::-1] d = a1 + b1 d = sorted(d) w = len(d) - 1 while w > 0: if d[p] == d[p1]: l.insert(0, d[p]) p = p + 1 p1 = p1 + 1 w = w - 1 print(max(l))
А если чисел больше, как тогда найти НОД ?
@user-iy6vk4pn1j
4 жыл бұрын
я думаю нужно найти сначала нод чисел а и б, потом б и с, с и д и т.д.
хотел присвоить : a,b=b,a%b >>>d=a,b=b,a%b получился кортеж(typle) как не сделать этого
киньте ссылку на сайт ACMP или как правильно??? 4:40
как результат while загнать в какую-либо переменную, чтобы с этим результатом выполнять действия?
@eld4j
3 жыл бұрын
Присваивание?
Задача слияние списков(задача в степике) что в 11 тесте ? Превышение временных лимитов
@egoroffchannel
3 жыл бұрын
Большие списки
@somthingwrong3602
3 жыл бұрын
@@egoroffchannel спасибо разобрался, сделал пустой список и напомнил его, сначала хотел во второй все вложить
а почему предыдущее видео только для спонсоров?
@redbull05689
4 жыл бұрын
Потому что автор тоже хочет кушать)
@user-ek3ik6sm3r
3 жыл бұрын
@@redbull05689 ага
@user-hr1og8zi2b
3 жыл бұрын
149 рублей не жалко за такую работу
@user-ek3ik6sm3r
3 жыл бұрын
@@user-hr1og8zi2b а у тебя есть дискорд?
@user-hr1og8zi2b
3 жыл бұрын
@@user-ek3ik6sm3r , да есть
А в каком уроке команда map была?
a = int(input("Введите первое число: ")) b = int(input("Введите второе число: ")) while a != b: my_list = [a, b] a = max(my_list) - min(my_list) b = min(my_list) print("The LCD is: ", a)
Cristal clear
a = int(input()) b = int(input()) while a != b: if a > b: a = b % a else: b = a % b print(a or b) так можно?
@egoroffchannel
3 жыл бұрын
Можешь проверить, вводи разные числа и смотри, что будет
a = int(input()) b = int(input()) d = a f = b while b > 0: c = a % b a = b b = c v = d * f / a print(v)
Кто знает почему тест не проходит код? def nod_proizvol(*args): if len(args) > 2: # формируется из множества аргументов - 2. Это максим + миним и оставшиеся аргументы max_ = max(args) + min(args) ostatok = sum(args) - max_ while ostatok != 0: max_, ostatok = ostatok, max_ % ostatok return max_ else: max_ = max(args) min_ = min(args) while min_ != 0: max_, min_ = min_, max_ % min_ return max_ # print(max_, ostatok) digits = list(map(int, input().split())) print(nod_proizvol(*digits))
извините но вы можете сказать как вы сделали коментты выделив несколько строк одновременно пожалуйста
@Mickk88
3 жыл бұрын
Выделить и зажать alt+3
Автор, ты ничего не напутал? 10:34 Говоришь a*b = НОД * НОК? Как так? и НОД и НОК меньше или равно наименьшего числа из пары A и B.
Как получить доступ к недоступным видео, где нужно спонсорство? Как оформить спонсорство ?
@egoroffchannel
4 жыл бұрын
патреон www.patreon.com/artem_egorov или на странице канала кнопка "Спонсировать"
@dimapetrov1859
4 жыл бұрын
@@egoroffchannel спасибо большое)
))))))
пришел в голову такой алгоритм: сначала отсортировать два входных числа, потом большее умножать на 2 пока не смогу оба числа без остатка поделить на получающееся число, в pycharm у меня всё работает гуд, уже много значений перепробовал, на степике не проходит тест 3, что не так? a=sorted([int(i) for i in input().split()]) delimoe=a[1] while delimoe%a[0]!=0 and delimoe&a[1]!=0: delimoe*=2 print(delimoe)
@egoroffchannel
3 жыл бұрын
если это программа для поиска НОД, то для чисел 14 и 7 она выводит 14
@user-mp6hr3ll8x
3 жыл бұрын
@@egoroffchannel А что делать,если во 2 случае выходит ошибка " name c is not defined"?
@egoroffchannel
3 жыл бұрын
@@user-mp6hr3ll8x создать такую переменную или не обращаться к ней вооьще
что значит map i split ?
@DecimusSaxon
3 жыл бұрын
3 видео про строки смотри
Нашел задачу в разделе практика под названием '1.А.Эпическая Игра', накатал индусский код, уверенности в ее правильности нет. Но все же поделюсь решением. Если у кого-нить есть решения, с радостью готов глянуть. Для наглядности изменил вывод ответов для понимания a1=a=int(input()) #В цикле переменная меняет значения, использовал a=a1(b=b1, n=n1)для возврата исх. значения. b1=b=int(input()) n1=n=int(input()) while n1>=0: while n>0: a,n=n,a%n if n1-a0: b,n=n,b%n if n1-b
@HmaPaYT
5 жыл бұрын
+
@user-fr3hy2ls9u
4 жыл бұрын
a,b,n=map(int,input().split()) def gcd(x,y): while y>0: x,y=y,x%y return x i=0 temp=0 while n>temp: n=n-temp if i==0: temp=gcd(a,n) i=1 else: temp=gcd(b,n) i=0 if i==1: print(0) else: print(1)
Как может пригодиться нахождения НОДа в реальной работе, а не в задаче на экзамене?
@dimondsafkage4620
Жыл бұрын
Если твоя работа имеет математический характер
идеальный урок никакой воды и паразитов в теме
когда эта хрень закончиться обязательно стану спонсором хрень-самоизоляция
Непонятно 😫
@user-sy5rz5bv6l
4 жыл бұрын
бывает
@user-sy5rz5bv6l
4 жыл бұрын
вкачивай больше очков в интеллект
как только я начинаю понимать какой-то алгоритм, он сразу становится неэффективным... проклятье какое-то
Зачем так расписывать, если есть прекрасный модуль math, с помощью которого можно командой math.gcd(a,b) найти НОД этих двух чисел? Или тут есть подвох?)
@egoroffchannel
Жыл бұрын
Зачем ты учишь программирование, если давно все написано за тебя? Или есть подвох?)
@Sebushekprgr
Жыл бұрын
@@egoroffchannel Проще написать так, чем расписывать миллионы строк. Проще написать через gcd, но точно не через 8 строк. В решении олимпиадных задач контесту до одного места как ты ищешь НОД. Пол олимпиады думать как найти НОД -- бред. Я понимаю, новичкам данный видеоролик подойдёт , но в программировании нужно быть хитрее))
Как я понял практического применения от этого алгоритма нет, а урок этот будет полезен только тем кто Ег сдает.
@Max-i1h
2 жыл бұрын
a ещё мозги потренировать
@Sebushekprgr
Жыл бұрын
Бессмысленный урок как по мне, обычные прогеры напишут gcd , чем расписывать такой цикл ,тратя драгоценное время.
Почему не могу оформить подписку на ютуб?
@egoroffchannel
3 жыл бұрын
kzread.info/dash/bejne/ZKaWuLCNp5vHmsY.html
@user-po4xo8rv2e
3 жыл бұрын
@@egoroffchannel Так я хочу на ютуб подписку, как это сделать?если я не вижу кнопу спонсировать
Второй урок и снова нихренашеньки непонятно !!!!!!!!!!
a = int(input('Введите число:')) b = int(input('Введите 2-ое число:')) x = a * b while b > 0: a, b = b, a % b y = int(x / a) # НОК print(y) print(a) Так находится НОК?
@user-ew9yr5zo4s
4 жыл бұрын
можно и так a=50 b=130 g=a*b while a!=0 and b!=0: if a>b: a=a%b else: b=b%a d=a+b nay=int(g/d) print(nay)
@user-ew9yr5zo4s
4 жыл бұрын
в принципе одно и тоже
@yureache32432
3 жыл бұрын
Не правильно
555555555555
"map" мы ещё не праходили 😟
"Понадобятся на егэ" Я, которой 25 🤔🤫🤭
Одна математика. Перестал понимать с 4 урока
Спасибо!
Спас жизнь спас