Рассмотрим следующий фрагмент программы, вычисляющейчастное q и остаток r от деленияцелых чисел a, b: // дано: целые числа a >= 0, b > 0 int a, b; . . . int q = 0, r = a; int e = 1, m = b; while (r >= b) { if (2*m <= r) { e *= 2; m *= 2; } else if (m > r) { e /= 2; m /= 2; } else { // утверждение: m <= r && r < 2*m q += e; r -= m; } } // q и r - частное и остаток от деления a на b
Какое условие является инвариантом цикла?
(Отметьте один правильный вариант ответа.)
Варианты ответа
Число e является степенью двойки, а также выполняются равенства a + q*b == r и m == e*b.
Число e является степенью двойки, а также выполняются равенства a - q*b == r и m == e*b. (Верный ответ)
Число e является степенью двойки, а также выполняются равенства a - q*m == r и m == e*b.
Число e является степенью двойки, а также выполняются равенства a - q*m == r и m == e+b.