![]() |
|
|
|
|
#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
|
|||
|
|||
|
Ну НАИБОЛЬШИЙ общий делитель равен произведению этих чисел. А если ты прогишь дроби то мож те и воспользоваться произведением
|
|
#5
|
|||
|
|||
|
Цитата:
произведение этих чисел является наименьшим о6щим делимым.) |
|
#6
|
|||
|
|||
|
Цитата:
произведение этих чисел является наименьшим о6щим делимым.) |