Составьте программу нахождения наибольшего общего делителя трёх чисел,используя следующую формулу:
НОД(A,B,C)=НОД(НОД(A,B),C).
Нужно на паскале
Ответы
var
a, b, c:integer;
begin
write('a = '); readln(a);
write('b = '); readln(b);
write('c = '); readln(c);
write('НОД(', a, ', ', b, ', ', c, ') = ');
while (a <> 0) and (b <> 0) do
if a >= b then
a := a mod b
else
b := b mod a;
a := a + b;
while (c <> 0) and (a <> 0) do
if a >= c then
a := a mod c
else
c := c mod a;
writeln(a + c);
end.
Объявляем функцию gcd, принимающую два целочисленных параметра и возвращающую их наибольший общий делитель. Здесь это вычисляется при помощи алгоритма Евклида.
Затем для удобства определяем ещё одну функцию gcd3, которая принимает уже три аргумента и, используя указанную в условии формулу и описанную выше функцию gcd, вычисляет НОД от трёх чисел.
В основной части программы просто три числа считываются с клавиатуры и выводится ответ.
Код (PascalABC.NET v3.6.2316):
function gcd(a, b: integer): integer;
begin
while a * b <> 0 do
(a, b) := (b, a mod b);
Result := a + b
end;
function gcd3(a, b, c: integer) := gcd(gcd(a, b), c);
begin
var (a, b, c) := ReadInteger3;
print(gcd3(a, b, c))
end.
Пример ввода:
10 40 20
Пример вывода:
10