Рассмотрим следующую функцию, аргументами которойявляются два целых неотрицательных числа:int f(int m, int n) { // дано: m >= 0 и n >= 0 int a = m; int b = n; int c = 1; while (a != 0 && b != 0) { if (a%2 == 0 && b%2 == 0) { // a и b четные a /= 2; b /= 2; c *= 2; } else if (a%2 == 0) { // a четное, b нечетное a /= 2; } else if (b%2 == 0) { // a нечетное, b четное b /= 2; } else { // a и b нечетные if (a > b) { a -= b; } else { b -= a; } } } // end while return c*(a + b);}
Какое условие является инвариантом цикла?(Через НОД и НОК обозначены наибольший общий делитель инаименьшее общее кратное.)
(Отметьте один правильный вариант ответа.)
Варианты ответа
Равенство НОК(m, n) = c*(a + b).
Равенство НОД(a, b) = НОД(m, n)*c.
Равенство НОД(a,b)*c = НОД(m, n). (Верный ответ)
Равенство НОД(a,b) = НОД(m, n)*c.