![]() |
|
|
#1
|
||||
|
||||
![]() Писал прогу, застрял на одном моменте - надо найти максимальный общий делитель для двух чисел. Сначала показалось элементарно, потом понял что нифига не знаю. Пытался выяснить через div, но как я сразу же понял буль он не возвращает. Есть ли в стандартной библиотеке подобные функции? Или проверка на принадлежность типу?
Алкоголик-аморал, явная угроза обществу Блин, я уже местный, а все равно нифига не знаю... |
#2
|
|||
|
|||
![]() Ну, можно порыть алгоритм в инете.
С другой стороны, могу подсказать некоторую эвристику. 1. НОД не может быть больше меньшего числа. 2. Нужно сравнивать отстатки от деления (д.б. = 0). Код:
function FindNOD(A, B : Integer) : Integer; begin Result := Min(A,B); While Result > 1 Do If ((A mod result) = 0) And ((B mod result) = 0) Then Break Else Dec(Result); end; PS. Для данного кода входные значения д.б. положительные. Для отрицательных поправь вычисление стартового числа (в Min числа взять Abs). |
#3
|
|||
|
|||
![]() наибольший общий делитель
Код:
readln(a,b); while a<>b do if a>b then a:=a-b else b:=b-a; writeln(a); Истина где-то рядом... |
#4
|
|||
|
|||
![]() Ну НАИБОЛЬШИЙ общий делитель равен произведению этих чисел. А если ты прогишь дроби то мож те и воспользоваться произведением
APPLICATION.TERMINATOR |
#5
|
|||
|
|||
![]() Цитата:
произведение этих чисел является наименьшим о6щим делимым.) Истина где-то рядом... |
#6
|
|||
|
|||
![]() Цитата:
произведение этих чисел является наименьшим о6щим делимым.) Истина где-то рядом... |