Вычисление НОД
НОД = наибольший общий делитель двух натуральных чисел –
это наибольшее число, на которое оба исходных числа делятся
без остатка.
Перебор: ИЛИ
k = a; // или k = b;
while ( a % k != 0 || b % k != 0 )
k --;
cout<<"НОД(" << a<<", "<<b<<")="<< k;
9
Наименьшее общее кратное двух целых чисел A и B есть наименьшее натуральное число,
которое делится на A и B без остатка.
Чтобы лучше понять о чем речь — предлагаю такую геометрическую интерпретацию:
значения A и B задают длины отрезков. НОК — это длина другого отрезка, который можно составить как из
целого количества отрезков A, так и отрезков B
:
наименьшее_общее_кратное(a, b) {
верни (A*B)/наибольший_общий_делитель(a, b);
}
Реализация алгоритма Евклида
Рекурсивный вариант: Без рекурсии:
int NOD ( int a, int b ) int NOD ( int a, int b )
{ {
if ( a == b ) return a; while ( a != b )
if ( a < b ) if ( a > b ) a -= b;
return NOD ( a, b-a ); else b -= a;
else return NOD ( a-b, b ); return a;
} }