#37. Алгоритм Евклида для нахождения НОД | Python для начинающих

Поділитися
Вставка
  • Опубліковано 26 лис 2024

КОМЕНТАРІ • 51

  • @MSMA8423
    @MSMA8423 Рік тому +3

    Ваш подход к обучению достоин аплодисментов. Объясняете быстро и понятно. Спасибо

  • @rustambox
    @rustambox 3 роки тому +15

    Тестирование функции это отличный способ из практики. Благодарю за передаваемую частичку опыта. Обязательно возьму на вооружение! Надеюсь, что с алгоритмом Евклида я больше не встречусь.

  • @alexanderdark
    @alexanderdark 3 роки тому +15

    Хорошо, что пишете комментарии документации!👍Но, тогда не плохо бы и аннотации принимаемых и возвращаемых типов при объявлении функции указать))

  • @ХалилМаденбай
    @ХалилМаденбай 3 роки тому +6

    все понятно как пять пальцев. Автору респект.

    • @Putu_pererenan
      @Putu_pererenan 2 місяці тому

      Сказал фрезировщик 3 разряда

  • @ney107-iz6xl
    @ney107-iz6xl 6 місяців тому +1

    a, b = [int(input()) for _ in range(2)]
    def func(a, b):
    while a != 0 or b != 0:
    res = [b % a if a < b else a % b]
    return res
    result = func(a, b)
    print(result)
    мой синтакс

  • @igorandante
    @igorandante 3 роки тому +21

    В быстром алгоритме не нужна проверка if a

    • @swaytornado8327
      @swaytornado8327 2 роки тому +1

      Привет. Ты верно заметил! Я по твоему совету не использовал проверку с if и всё заработало. А расскажешь, как это Пайтон так сделал. Спасибо за совет)

    • @user-LvSerg777
      @user-LvSerg777 8 місяців тому

      Тоже обратил на это внимание!

    • @Putu_pererenan
      @Putu_pererenan 2 місяці тому

      @@swaytornado8327 если меньшее делить по остатку на большее, то останется в остатке все меньшее число целиком. Но я бы проверку оставил, для наглядности и понятности кода

  • @СергейСмирнов-ь8у
    @СергейСмирнов-ь8у 3 роки тому +4

    Отличное видео! Спасибо автору!

  • @andredru4278
    @andredru4278 9 місяців тому +1

    Спасибо. Надо писать тесты!

  • @СергейФролов-ъ5я
    @СергейФролов-ъ5я 3 роки тому +4

    отличное видео, большое спасибо!

  • @ekaterinad3350
    @ekaterinad3350 2 роки тому +1

    Сергей,спасибо Вам огромное! В очередной раз помогли разобраться-все четко и понятно. Уже до написания Вами кода мне стало понятно в какую сторону двигаться)

  • @x-user-agent
    @x-user-agent 3 роки тому +14

    спасибо👍 а может еще и про тестирование сделаете серию роликов?🤞 былобы ваще супер)👍

  • @donfedor007
    @donfedor007 3 роки тому +3

    Хороший урок, спасибо!

  • @ВладЛосев-н8т
    @ВладЛосев-н8т 5 місяців тому +1

    Ты харош, спасибо тебе :)

  • @assiyasabyrova8578
    @assiyasabyrova8578 2 роки тому +1

    Спасибо большое

  • @gayratsaidakhmedov5451
    @gayratsaidakhmedov5451 11 місяців тому +1

    спасибо

  • @jamjam3337
    @jamjam3337 Рік тому +1

    спасибо!

  • @Юлия-ч9с6й
    @Юлия-ч9с6й 2 роки тому +1

    Очень интересно. И даже вроде все понятно, но надеюсь не понадобится =)

  • @return_1101
    @return_1101 2 роки тому +4

    Теперь знаем что за тесты на степике.

  • @ГуняГуняев-ю7ф
    @ГуняГуняев-ю7ф 2 роки тому +2

    пара моментов на которые хотелось бы указать.хотелось бы в 3 тесте увидеть время выполнения
    ну и самое интересное....попробовал я тут побаловаться с рекурсией и написал рекуррентную функцию для алгоритма Евклида....так это что-то просто фантастическое....Нод для астрономических чисел там что то порядка 100**100, 200**200 считает за тысячные доли секунды....это что-то невообразимое просто

  • @ibrahimoglu
    @ibrahimoglu 3 роки тому +6

    👍

  • @tbassir9076
    @tbassir9076 Рік тому +1

    Как всегда всё великолепно! Сначала Вы объяснили медленный способ, а потом быстрый. Значит медленный попросту не нужен? Или нужен для более детального понимания?

  • @impellergimpeller5133
    @impellergimpeller5133 3 роки тому +3

    👍👍👍👍👍

  • @swaytornado8327
    @swaytornado8327 2 роки тому +1

    """ test 3 """
    a, b = 2, 1000000000000000000000000000000000000
    st = time.time()
    res = func(a, b)
    et = time.time()
    dt = et - st
    if res == 2 and dt < 1:
    print('test 3 is Ok!')
    else:
    print('test 3 is Bad!')
    6
    Help on function get_nod in module __main__:
    get_nod(a, b)
    Визначаємо НЗД(найбільший загальниц дільник) для натуральних чисел a і b
    по швидкому алгоритму Евкліда
    :param a: перще натуральне число
    :param b: друге натуральне число
    :return: НЗД
    test 1 is Ok!
    test 2 is Ok!
    test 3 is Ok!
    Дальше не стал мучать ноут, хотя хочу ответить, что результат выводился в пределах 1секунды)

  • @yuriitkachenko2115
    @yuriitkachenko2115 3 роки тому +4

    а можно будет посветить ролик вложенным ф-м?

  • @Vednier
    @Vednier 2 місяці тому +1

    Все это прекрасно, но что насчет НОД для многих чисел?

    • @blindboy007
      @blindboy007 22 дні тому

      вкладываешь функцию в функцию. Профит!

  • @funnydc9955
    @funnydc9955 2 роки тому +1

    не могу понять, как при создании функции test_nod с аргументом (func) оно подтягивает тело функции от get_nod ???????? где мы указывает что именно func ссылается на get_nod ??

    • @a-km8045
      @a-km8045 Рік тому

      8:05 пишет имя заранее созданной функции test_nod(запихивает туда get_nod) , отсюда связь. К примеру могу написать look = oop(a,b) ----- nub(look) дальше вызвать функцию def nub(clup - в этот момент можно менять название )

    • @ToN95
      @ToN95 10 місяців тому

      @@a-km8045 после твоего ответа стало понято ничего

  • @michailpty6302
    @michailpty6302 Рік тому

    Думаю более корректное название этого видео
    #37. Функции тестирования на примере алгоритма Евклида для нахождения НОД | Python для начинающих

  • @Никита-п6и1к
    @Никита-п6и1к 2 роки тому +1

    По алгебре сейчас проходим евклида

  • @denistalko6585
    @denistalko6585 3 роки тому +4

    Сергей, скажите, а будут ли ещё видео про тестирования? Думаю, это очень полезно в работе.

    • @selfedu_rus
      @selfedu_rus  3 роки тому +2

      Пока не планирую. Здесь, в принципе, ничего сложного. Главное правильно составлять тесты, чтобы они охватывали все критичные вариации выполнения программы.

    • @denistalko6585
      @denistalko6585 3 роки тому +1

      @@selfedu_rus согласен, тут ничего сложного. Но на будущее - я бы с удовольствием посмотрел примеры тестирования на более серьёзных программах.

  • @МаксимАндреев-я1г
    @МаксимАндреев-я1г 3 роки тому +1

    А если записать комментарии строчные через #, функция help покажет их?

  • @swaytornado8327
    @swaytornado8327 2 роки тому +1

    а подскажите пожалуйста, а почему в этом примере на 5 мин, если записать проверку тернарным оператором, видает вот такую ошибку?
    a -= b if a > b else b -= a
    ^^
    SyntaxError: invalid syntax
    Может кто скажет. Заранее благодарен.

    • @selfedu_rus
      @selfedu_rus  2 роки тому

      из-за оператора -= тернарный оператор должен просто возвращать значение, а не присваивать что-либо переменной

    • @swaytornado8327
      @swaytornado8327 2 роки тому +1

      @@selfedu_rus спасибо вам большое за ответ. из-за обузнаности в таких простых вещах, надеюсь будет меньше плохих специалистов и говнокода)

  • @Люсьена-у2ы
    @Люсьена-у2ы Рік тому

    А если числа взаимно простые?

  • @ney107-iz6xl
    @ney107-iz6xl Рік тому

    Кто понял объясните быстрый алгоритм ничего не понимаю именно в быстром алгоритме
    заранее спасибо

  • @Kerogas_
    @Kerogas_ Рік тому +1

    Кто-то может доступным языком объянить отличие a, b = b, a % b от
    a = b
    b = a % b

    • @some_dude1
      @some_dude1 10 місяців тому

      Обе записи одинаковы по смыслу. Просто в первом примере идет множественное присваивание, которое записывается в одну строчку. Тут вопрос личных предпочтений. Кому как удобнее читать код.

    • @blindboy007
      @blindboy007 22 дні тому

      @@some_dude1 не только множественное присваивание, а еще и кортеж