Объявляем функцию 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);
Перечислим их:
1111 => 4+4+4+4 = 16
1112 => 4+4+4-3 = 9
1121 => 4+4-3+4 = 9
1122 => 4+4-3-3 = 2
1211 => 4-3+4+4 = 9
1212 => 4-3+4-3 = 2
1221 => 4-3-3+4 = 2
1222 => 4-3-3-3 = -5
2111 => -3+4+4+4 = 9
2112 => -3+4+4-3 = 2
2121 => -3+4-3+4 = 2
2122 => -3+4-3-3 = -5
2211 => -3-3+4+4 = 2
2212 => -3-3+4-3 = -5
2221 => -3-3-3+4 = -5
2222 => -3-3-3-3 = -12
Перечислим полученные результаты с разными числами(одинаковые выводить не будем)
16
9
2
-5
-12
ответ: Таких чисел будет 5(пять)
Объявляем функцию 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