2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Почему алгоритм Евклида(НОД) работает?
Сообщение14.08.2019, 10:13 


20/01/19
40
Доброго времени суток!
Пытаюсь понять алгоритм Евклида для отыскания НОД двух чисел. С применением его на практике у меня проблем нет. Но меня задевает то, что принцип заложенный в алгоритм, для меня не очевиден. Тоесть, если я забуду алгоритм, то мне в голову не придет делить делитель на остаток.
Читал об алгоритме в таких книгах: Зайцев, Цыпкин, Дэвенпорт, но вопрос остался. Например, Зайцев приводит соотношение деления двух чисел с остатком, а потом сразу предлагает разделить делитель на остаток без обоснования такого шага. Вишенкой на тортике для меня было прочитать, что оказывается, если остаток разделит делитель на целое число раз, то он и будет НОД. И это же объяснение подходит для случая, когда два числа делятся нацело, если кто забыл. А ничего, что в этот момент мы можем находится на энной итерации и актуальнее будет вопрос не что будет дальше, а как я сюда попал?

 Профиль  
                  
 
 Re: Почему алгоритм Евклида(НОД) работает?
Сообщение14.08.2019, 10:27 
Заслуженный участник
Аватара пользователя


01/08/06
3131
Уфа
Можно так (считаю $a$ и $b$ неотрицательными целыми):
1) $GCD(a, 0) = a$, поскольку 0 делится на что угодно.
2) $GCD(a, b) = GCD(b, a) = GCD(a+b, b) = GCD(a-b, b)$, поскольку если $a$ и $b$ делятся на одно и то же число, то $a+b$ и $a-b$ делятся на то же число.
Пользуясь правилом 2, пытаемся уменьшить больший аргумент (пусть будет $a$), чтобы он стал меньше, чем меньший ($b$). При этом $a-b$, применённое нужное число раз, естественным образом оптимизируется в $a\bmod b$ (остаток от деления $a$ на $b$). Если получается сразу ноль (больший нацело делится на меньший), то по правилу 1 НОД получается. Если не получается, то, поскольку остаток всегда меньше делителя, меняем числа местами и повторяем правило 2.

 Профиль  
                  
 
 Re: Почему алгоритм Евклида(НОД) работает?
Сообщение14.08.2019, 13:23 
Заслуженный участник
Аватара пользователя


11/03/08
9904
Москва
Ну, это скорее вопрос "как строить алгоритмы". Можно с классического Дейкстры начать, "Дисциплина программирования" или "Наука программирования" Гриса.
В общем, нам надо найти нечто, удовлетворяющее условию. Находим инвариант и преобразование, его сохраняющее. И применяем преобразование так, чтобы результат был в некотором смысле "удобнее".
Какие преобразования сохраняют НОД двух чисел? Например, если мы их сложим или вычтем одно из другого, НОД сохранится? А что для нас удобнее, большие числа или малые? Тогда, очевидно, если из большего вычтем меньшее, НОД сохранится, а числа будут "приятнее". Но можно вычитать не один раз, а многократное вычитание, пока можно, сведётся к делению с остатком. Если остаток ноль - значит, НОД был делителем. "Наконец нашли!" Если не ноль - он меньше делителя, и повторяем процедуры, переставив местами.

 Профиль  
                  
 
 Re: Почему алгоритм Евклида(НОД) работает?
Сообщение15.08.2019, 09:41 
Аватара пользователя


17/04/11
658
Ukraine
Resa в сообщении #1410268 писал(а):
Но меня задевает то, что принцип заложенный в алгоритм, для меня не очевиден. Тоесть, если я забуду алгоритм, то мне в голову не придет делить делитель на остаток.
Читал об алгоритме в таких книгах: Зайцев, Цыпкин, Дэвенпорт, но вопрос остался. Например, Зайцев приводит соотношение деления двух чисел с остатком, а потом сразу предлагает разделить делитель на остаток без обоснования такого шага.

Просто авторы не доказали корректность этого алгоритма. Это такой подход, называется «математика без доказательств» (примерно как «физика без формул») :lol: . Хотя эту книгу (или книг) я не читал. Возможно, авторы приводят доказательство корректности дальше, но вы его не нашли. (Кстати, пишите данные книг полностью, потому что я не нашёл в вебе даже названия этой книги). Вообще при публикации нового алгоритма в научной статье всегда доказывают его корректность, и в хороших учебниках по информатике тоже.

Доказательство корректности алгоритма Эвклида есть во многих книгах по началам теории чисел или началам алгебры. Доказательство идёт, как у worm2, со следующей поправкой. Надо понимать, что $\gcd(a, b)$ возвращает множество чисел, множество всех НОД-ов. НОД в натуральных числах уникален, поэтому о нём говорят как об одном числе и неформальная запись $\gcd(a, 0) = a$ формально означает $\gcd(a, 0) = \{a\}$. Однако во многих других контекстах, где используется НОД, он не уникален. В целых числах $\gcd(a, 0) = \{a, -a\}$, то это есть множество всех целых чисел, ассоциированных с $a$.

 Профиль  
                  
 
 Re: Почему алгоритм Евклида(НОД) работает?
Сообщение15.08.2019, 10:37 
Заслуженный участник


20/12/10
9062
Resa в сообщении #1410268 писал(а):
Читал об алгоритме в таких книгах: Зайцев, Цыпкин, Дэвенпорт, но вопрос остался.
Дэвенпорт --- это, скорее всего, "Высшая арифметика. Введение в теорию чисел" (М.: Наука, 1965). Алгоритму Евклида посвящен отдельный пункт (стр. 24-26). Алгоритм детально описан и довольно подробно обоснован, а также сопровожден численным примером. Все ровно так, как автор описал в предисловии: "В этой книге теоремы и их доказательства часто иллюстрируются численными примерами. Примеры обычно очень просты и могут не удовлетворить читателя, который любит вычисления. Задача этих примеров — пояснить общую теорию." Чего можно умудриться не понять в таком изложении стандартной версии алгоритма Евклида --- загадка.

В книге Дэвенпорта есть сложные алгоритмы, которые даются без доказательства их корректности (например, алгоритмы, с помощью которых простые числа можно представить суммой двух квадратов), но автор об этом честно сообщает читателю (и даже пишет, что доказательства не слишком просты).

 Профиль  
                  
 
 Re: Почему алгоритм Евклида(НОД) работает?
Сообщение15.08.2019, 19:18 


20/01/19
40
Извините за небольшое мое изчезновение. Если честно, я задумался над тем, что написал worm2 и не хотел ничего писать пока мое представление продолжало формироваться.
Worm2 написал правило №2. В нем для меня приятная неожиданность. Пытаясь раскусить алгоритм самостоятельно, я несколько раз подозревал, что здесь может быть замешан дистрибутивный закон, но где - понять не повезло. Правило №2 - это натуральный дистрибутивный закон, ведь так? Значит, нет сомнений что $a$, $b$, $a+b$ имеют общий делитель. И тут мысль: если $GDC(a,b)=GDC(a+b,b)$, тогда $GDC(b,a+b)=GDC(a+2b,a+b)$. И снова, $GDC(a+b,a+2b)=GDC(2a+3b,a+2b)$. И так до бесконечности! Вывод: один и тот же НОД содержится в начальном "дистрибутивном выражении" и в эквивалентном ему, путь к которому лежит через произвольное количество повторений. Но при этом разрядность числа будет расти до бесконечности.
И вот есть два бесконечно больших числа. Ты уверен, что их НОД - это та самая двоечка(например) с которой ты начинал? Тут я приуныл. Самое очевидное решение было начать в ручную прописывать этот сценарий на конкретных числах. Допустим $a=2\times3$, а $b=2\times5$. Вот:
$\begin{multiline}
2\times3+2\times5=2\times8\\
2\times5+2\times8=2\times13\\
2\times8+2\times13=2\times21\\
2\times13+2\times21=2\times34\\
2\times21+2\times34=2\times55\\
2\times34+2\times55=2\times89\\
2\times55+2\times89=2\times144\\
2\times89+2\times144=2\times233\\
2\times144+2\times233=2\times377\\
2\times233+2\times377=2\times610\\
2\times377+2\times610=2\times987\\
2\times610+2\times987=2\times1597\\
2\times987+2\times1597=2\times2584\\
2\times1597+2\times2584=2\times4181\\
2\times2584+2\times4181=2\times6765\\
2\times4181+2\times6765=2\times10946\\
2\times6765+2\times10946=2\times17711\\
\end{multiline}$
Да, числа большие, а значит делителей больше, а значит нельзя исключать, что в разложении этих чисел на простые множители общими окажутся не только 2-ки, но еще какие-то делители и НОД изменится. Но проверяем и убеждаемся, что во всех случаях НОД - это 2. Как такое возможно? - Только в одном случае - когда множители при коефициентах 2 - это два взаимно простых числа. Не простых, а взаимно простых! Шок! Вот это математика! Как возможно, что всегда эти числа оказываются взяимно простыми? Посмотрев еще раз на выражения, я заметил, что $2\times3+2\times5=2\times8$ - это тоже самое что $3+5=8$. Попробую сделать второй вывод... Если $a$ и $b$ - взаимнопростые числа, то $b$ и $a+b$ также будут взаимно простыми числами. Если я нигде не ошибся, то именно этот последний вывод я считаю ключом к доказательству обсуждаемого алгоритма.
А теперь вернемся к тому, что написал worm2. Когда мы уяснили правило 2 и у нас нет более никаких сомнений, подобных описанному выше, то давайте допустим, что правило работает и в обратную сторону, тоесть будем уменьшать делимое, отняв от него делитель. Вообще, чем вызван этот шаг? Да просто два аргумента не поделились нацело и второе правило для нас - как единственное утешение. По-крайней мере, уменьшая делимое мы не теряем НОД, а там, может и более удачное соотношение чисел подвернется и разделятся они! Но тут же понимаем, пока разность делимого и делителя больше делителя не разделятся они. Потому что не в делителе причина неделимости. Остаток, который скрывается за всеми вычитаниями - это он не кратен делителю. Наконец, докопались мы до остатка. Для нас уже не принципиально, что это называется остатком. Главное, что НОД остатка и делителя равен НОД делимого и делителя. Абстрагируемся от предыстории и снова пытаем удачу деля больший аргумент на меньший. Если не в этот раз то в следующий должно разделится без остатка. Тогда и пригодятся те слова из Зайцева, что при делении нацело делитель есть НОД.
beroal в сообщении #1410470 писал(а):
Кстати, пишите данные книг полностью

В.В. Зыйцев, В. В. Рыжков, М. И. Сканави - Элементарная Математика(Издательство "Наука", Москва 1974г.
А. Г. Цыпкин - Справочник по математике для средних учебных заведений(Изд-во "Наука", 1988г)
Г. Дэвенпорт - Высшая Арифметика. Введение в теорию чисел.(перевод с английского, изд-во "Наука", 1965г.)
nnosipov в сообщении #1410483 писал(а):
Чего можно умудриться не понять в таком изложении стандартной версии алгоритма Евклида --- загадка.

Прошу понять меня правильно, я не имел в виду бросить тень на эти чудесные книги. Я их по-прежнему ценю. Только Дэвенпорта я читаю в электронном варианте, а чтобы купить остальные книги мне пришлось поехать в другой город на книжный базар. Дело в том, что этим алгоритмом, я занялся вообще не по своей воле. Я наткнулся в специальной литературе на слова "операция вычета по модулю". Так как я серьезно отношусь к этой литературе, то не могу расчитывать на усвоение материала, не понимая математического аппарата, на который этот материал опирается. Вот траектория, которая меня завела в эту тему: вычеты по модулю - сравнение по модулю - деление с остатком - алгоритм Евклида. Естесственно, нервничаешь ибо всегда хочется быстрее. :-)
Возможно, у кого-то есть комментарии по теме - милости прошу.

 Профиль  
                  
 
 Re: Почему алгоритм Евклида(НОД) работает?
Сообщение15.08.2019, 19:36 
Заслуженный участник
Аватара пользователя


01/03/06
13626
Москва
Resa в сообщении #1410568 писал(а):
Возможно, у кого-то есть комментарии по теме - милости прошу.

У меня есть вопрос вот по этому высказыванию:
Resa в сообщении #1410568 писал(а):
И вот есть два бесконечно больших числа.

Дайте определение бесконечно большого числа.

 Профиль  
                  
 
 Re: Почему алгоритм Евклида(НОД) работает?
Сообщение15.08.2019, 19:42 
Заслуженный участник


20/12/10
9062
Resa в сообщении #1410568 писал(а):
чтобы купить остальные книги мне пришлось поехать в другой город на книжный базар
Потрясен, но вместе с тем и удивлен: неужели тех книг нет тоже в электронном виде? В наше время такое случается только по отношению к очень редким книгам. А эти производят впечатление совсем обычных.

Вы школьник?

 Профиль  
                  
 
 Re: Почему алгоритм Евклида(НОД) работает?
Сообщение15.08.2019, 19:46 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Всё это легче понимать, если знать основную теорему арифметики.

 Профиль  
                  
 
 Re: Почему алгоритм Евклида(НОД) работает?
Сообщение15.08.2019, 19:58 


20/01/19
40
Brukvalub в сообщении #1410577 писал(а):
Дайте определение бесконечно большого числа.


Честно? - Не знаю. Но предвосхищаю вопрос: почему тогда используешь? Не ваш так других пользователей вопрос. Поэтому поясню в каком смысле использовал это слово. Раз я смог увеличить разрядность несколько раз подряд, то по индукции могу это делать бесконечно, главное, чтобы время было в распоряжении и вычислительная мощность :D
nnosipov в сообщении #1410579 писал(а):
Потрясен, но вместе с тем и удивлен: неужели тех книг нет тоже в электронном виде? В наше время такое случается только по отношению к очень редким книгам. А эти производят впечатление совсем обычных.

Вы школьник?

Все просто. Во-первых, ценю реальную книгу намного больше электронной. Об отличии процесса чтения электронной и реальной книг где-то говорила Татьяна Черниговская. Я склонен согласится. Во-вторых, я отнюдь не ехал за этими книгами. Просто из прочих мой выбор пал на них. Я не школьник.

 Профиль  
                  
 
 Re: Почему алгоритм Евклида(НОД) работает?
Сообщение15.08.2019, 20:00 
Заслуженный участник


18/01/15
3225
О, Аллах !
Resa, Вы почитайте книжку О.Оре, Приглашение в теорию чисел. Поистине, нет книги более простой ! Если не знаете где взять, зайдите на сайт gen.lib.rus.ec.

 Профиль  
                  
 
 Re: Почему алгоритм Евклида(НОД) работает?
Сообщение15.08.2019, 20:03 
Заслуженный участник


20/12/10
9062
Да, Дэвенпорта, наверное, пока рановато читать.

 Профиль  
                  
 
 Re: Почему алгоритм Евклида(НОД) работает?
Сообщение15.08.2019, 20:04 
Заслуженный участник


18/01/15
3225
Resa в сообщении #1410585 писал(а):
Но предвосхищаю вопрос: почему тогда используешь?

Такого вопроса тут быть не может, т.к. участники форума обращаются друг к другу на "Вы".

 Профиль  
                  
 
 Re: Почему алгоритм Евклида(НОД) работает?
Сообщение15.08.2019, 20:44 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Resa в сообщении #1410585 писал(а):
Во-первых, ценю реальную книгу намного больше электронной. Об отличии процесса чтения электронной и реальной книг где-то говорила Татьяна Черниговская. Я склонен согласится.

Ну говорила и говорила. Самое главное: электронных книг намного больше, в том числе не переиздаваемых сегодня, старых хороших книг. И они доступней (часто бесплатны), то есть можно спокойно набрать несколько книг "про запас", и выбрать из них для чтения одну, не сожалея о потраченных средствах.

 Профиль  
                  
 
 Re: Почему алгоритм Евклида(НОД) работает?
Сообщение15.08.2019, 22:08 
Заслуженный участник
Аватара пользователя


01/03/06
13626
Москва
Resa в сообщении #1410585 писал(а):
Brukvalub в сообщении #1410577

писал(а):
Дайте определение бесконечно большого числа.

Честно? - Не знаю. Но предвосхищаю вопрос: почему тогда используешь? Не ваш так других пользователей вопрос. Поэтому поясню в каком смысле использовал это слово. Раз я смог увеличить разрядность несколько раз подряд, то по индукции могу это делать бесконечно, главное, чтобы время было в распоряжении и вычислительная мощность :D

Для меня это выглядит дико: использовать в разговоре термины, не зная их точного смысла. Напоминает солдатскую шутку, когда новобранца посылают к завгару "за ведром клиренса".

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу 1, 2  След.

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: YandexBot [bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group