Псевдокод расширенного алгоритма Евклида: НА ВХОДЕ: два неотрицательных числа $%a$% и $%b$%: $%a\geq b$%
А что такое "с усеченными остатками" какой алгоритм? Никак не пойму. Спасибо. ------------------------Правка---------------------- На C# набросал программу которая реализовывает "Расширенный алгоритм Евклида с усеченными остатками"
Но проблема в том что у него количество итераций равно количеству итераций с обычным "Расширенный алгоритм Евклида", может я опять что то не понял? вроди все ок добавил задан 5 Ноя '14 13:10 asddsa |
Если можно, добавьте в ответы:
отвечен 19 Ноя '14 0:39 asddsa @falcao есть одна помарка, у нас тут НОД это число "а", но при расчете коэффициентов X и Y тоже надо как то учитывать их при условии r > b/2.? Иначе у меня при умножении ax + by <> НОД.
(22 Ноя '14 12:54)
asddsa
@asddsa: нахождение множителей -- это отдельная задача. Вообще, это довольно естественно делается в обратном порядке. По идее, надо запоминать промежуточные числа, и тогда это просто. Если не запоминать, то формулы перехода там тоже можно выписать, но они более "хитрые". Мне вникать в текст программы не хочется, но я могу всё как бы "с нуля" объяснить -- это проще.
(22 Ноя '14 17:06)
falcao
@falcao понял, спасибо, хочу еще помучится. :) Отпишусь, если получится. :)
(23 Ноя '14 14:24)
asddsa
|
@asddsa: это просто кто-то неудачный термин использовал. Здесь везде речь идёт о самых обычных остатках, что видно из алгоритма. Когда мы делим, скажем, 100 на 7, то мы несколько раз "усекаем" 100 на 7, получая остаток. Но вот кто и зачем придумал такой новый термин для остатка, назвав его "усечённым", этого я не могу "усечь" :)
Кстати, откуда сам этот текст и терминология?
@asddsa: к сожалению, я не понимаю этой терминологии. Давайте говорить в стандартных терминах. У нас есть два натуральных числа $%a$%, $%b$%. Есть теорема о делении с остатком согласно которой существуют и единственны целые $%q$%, $%r$%, для которых $%a=bq+r$% и $%0\le r < b$%. Они называются соответственно (неполным) частным и остатком от деления $%a$% на $%b$%. Легко видеть, что $%q=[a/b]$%, то есть целой части обычного (полного) частного. Обычно мы его находим, деля числа "в столбик", но можно делать это при помощи команд типа div. Зная $%q$%, выражаем $%r=a-bq$%. Этого достаточно.
@falcao http://oi58.tinypic.com/2d29aaw.jpg вот, в разделе другие алгоритмы, описан данный способ, но, к сожалению, так и не понял.
@asddsa: в том отрывке, на который Вы ссылаетесь, есть несколько замечаний чисто обзорного характера, и их можно не анализировать. А одна из модификаций алгоритма там описана достаточно чётко. А именно, если у меня при делении $%a$% на $%b$% получилось в остатке $%r$%, где $%r > b/2$%, то удобно заменить $%r$% на $%r'=b-r$% по той причине, что $%b-r < b/2$%, и алгоритм станет работать быстрее. Это довольно простая идея; в программе её можно реализовать добавлением одного условного оператора.
@asddsa: у Вас там делается не то, что нужно. Вы заменяете частное, которое в дальнейшем вообще не участвует, а остаток у Вас остаётся прежним. Понятно, что число шагов не меняется. По смыслу надо делать другое. Например, если я считаю НОД для 21 и 13, то в обычном случае будет (13,8), (8,5), (5,3), (3,2), (2,1). А при ускоренном алгоритме будет (13,5), (5,2), (2,1).
Условие там r>b/2, и полагать надо r:=b-r в этом случае.