Процитирую свой ответ
http://otvet.mail.ru/question/30984425/ странслировав код на С++
Нод:
пусть r - остаток от деления a на b. Есть алгоритм Евклида, согласно которому НОД (a, b) = НОД (b, r). Алгоритм порождает итеративный процесс, на котором одна из редукций даст пару аргументов с нулём в качестве b, а результатом будет являться аргумент a. Запишем алгоритм в форме хвостовой рекурсии:
int Gcd(int a, int b)
{
if (b == 0)
return a;
else
{
int r = a % b;
return Gcd(b, r);
}
}
Перепишем алгоритм в императивном стиле:
int Gcd(int a, int b)
{
while (b != 0)
{
int r = a % b;
a = b;
b = r;
}
return a;
}
НОК находится по формуле:
lcm(a, b) = (a * b) / gcd(a, b)
gcd(a, b) - НОД, полученный выше.
int Lcm(int a, int b)
{
return (a * b) / Gcd(a, b);
}
Тупо.