Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2009, 22:12   #1
Witaliy
Форумчанин Подтвердите свой е-майл
 
Регистрация: 27.04.2008
Сообщений: 179
По умолчанию Наименьший общий делитель

Здравствуйте
Подскажыте мне пожалуйста быстрый алгоритм вычисления НОД двух чисел. Мне он нужен под длинную арифметику, поэто он должен быть очень быстрый и без ничего лишнево.
Спасибо.
www.programmer.uaforums.net - Український форум програмістів.

www.satellite.ipsys.net - Український форум супутникового телебачення.
Witaliy вне форума Ответить с цитированием
Старый 25.03.2009, 08:43   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
под длинную арифметику
НАсколько длинную?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.03.2009, 08:44   #3
maladoy
delphi-ст!
Форумчанин
 
Аватар для maladoy
 
Регистрация: 02.01.2009
Сообщений: 825
По умолчанию

Код:
function nod(x,y:integer):integer; 
var r:integer;
begin repeat
r:=x mod y; x:=y; y:=r;
until y=0; nod:=x;end;
вступлю в команду разработчиков ПО на Delphi
maladoy вне форума Ответить с цитированием
Старый 25.03.2009, 09:04   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
r:=x mod y;
сейчас плохо думается с утра , но, предполагаю,
что используя алгоритм, предложенный maladoy, можно операцию целочисленного деления заменить на вычитание x - y до тех пор, пока x>y
т.е. данный оператор можно заменить на:
Код:
r:=x;
while r>y do r := r - y;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.03.2009, 10:40   #5
Witaliy
Форумчанин Подтвердите свой е-майл
 
Регистрация: 27.04.2008
Сообщений: 179
По умолчанию

Цитата:
НАсколько длинную?
До 2550 знаков

Да, действительно, было бы хорошо без деления...
Цитата:
сейчас плохо думается с утра , но, предполагаю,
что используя алгоритм, предложенный maladoy, можно операцию целочисленного деления заменить на вычитание x - y до тех пор, пока x>y
т.е. данный оператор можно заменить на:
Код:

r:=x;
while r>y do r := r - y;
Это весь код? Или ещё что-то надо?
www.programmer.uaforums.net - Український форум програмістів.

www.satellite.ipsys.net - Український форум супутникового телебачення.

Последний раз редактировалось Stilet; 25.03.2009 в 11:09.
Witaliy вне форума Ответить с цитированием
Старый 25.03.2009, 10:54   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

это только замена ОДНОГО оператора (который r:=x mod y)
полностью код будет выглядеть так (только типы свои подставите. ну и операцию вычитания - вызов своей "длинной" функции:
Код:
function nod(x,y:integer):integer; 
var r:integer;
begin 
  repeat
     r:=x;
     while r>y do r := r - y;  
     x:=y; y:=r;
  until y=0; 
  nod:=x;
end;
p.s. за эффективность данного кусочка я ответственность не несу...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.03.2009, 11:14   #7
Witaliy
Форумчанин Подтвердите свой е-майл
 
Регистрация: 27.04.2008
Сообщений: 179
По умолчанию

Что-то она зависает и без длинной арифметики...
www.programmer.uaforums.net - Український форум програмістів.

www.satellite.ipsys.net - Український форум супутникового телебачення.
Witaliy вне форума Ответить с цитированием
Старый 25.03.2009, 11:29   #8
-HunteR-
Форумчанин
 
Аватар для -HunteR-
 
Регистрация: 04.11.2007
Сообщений: 117
По умолчанию

Наименьший целый общий делитель для всех чисел - 1
Перед тем, как выложить код, я его всегда проверяю.
Если помог - тыкни на на весы слева, под аватарой.
-HunteR- вне форума Ответить с цитированием
Старый 25.03.2009, 12:11   #9
maladoy
delphi-ст!
Форумчанин
 
Аватар для maladoy
 
Регистрация: 02.01.2009
Сообщений: 825
По умолчанию

Нод-наибольший общий делитель.
вступлю в команду разработчиков ПО на Delphi
maladoy вне форума Ответить с цитированием
Старый 25.03.2009, 12:26   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Нод-наибольший общий делитель.
Если бы автор правильно называл свои темы то и вопросов бы таких не возникало. Иначе как реагировать на непонятные три буквы в названии? Мож имеется ввиду работа с всем извесным антивирем...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Составить прогамму, отысивающую наименьший общий составной делитель натуральных чисел N и M. Paskal Frontier Помощь студентам 7 16.12.2014 14:01
найти наименьший элемент и его номер в заданной таблице tim777777 Помощь студентам 1 02.03.2009 15:12
В массиве Р(10) введенном с клавиатуры поменять местами наибольший и наименьший элементы. Делфи. Lerika Помощь студентам 6 23.01.2009 11:52
Задача по матрицам. Поменять местами наименьший и второй по величине элементы Иван 883 Паскаль, Turbo Pascal, PascalABC.NET 5 03.01.2009 16:04
Общий вопрос Stilus Помощь студентам 0 05.06.2008 19:39