Найдите M, для которых A, B, C образуют AP в заданном порядке, если любой из них умножается на M
Даны 3 положительных целых числа A, B и C. Выберите положительное целое число M и умножьте любое из A, B или C на M. Задача состоит в том, чтобы решить, будут ли A, B и C соответствовать средней арифметической прогрессии (AP). Среднее значение после однократного выполнения вышеуказанной операции. Порядок A, B, C не может быть изменен.
Примеры:
Input: A = 30, B = 5, C = 10
Output: YES
Explanation: B = 5 can be multiplied by M = 4.
Then 2 * B = A + C (2 * 20 = 30 + 10).Input: A = 2, B = 1, C = 1
Output: NO
Explanation: A + C = 3 which is odd. B = 1 which is odd.
Both these values cannot be made even (because 2*B is always even so need for making both of them even) and equal simultaneously.
Подход:
- Говорят, что три целых числа находятся в AP, если
2 * B = A + C -(1)
This equation can also be written as
2 * B – C = A -(2)
and
2 * B – A = C -(3)
Ниже приведены шаги, которые используют это отношение, чтобы определить, могут ли данные три числа формировать AP или нет.
- Объявите переменную new_b и инициируйте ее равной 2 * B .
- Возвращает true , если A, B, C уже находятся в AP . Любой из них можно умножить на M=1 и ответ всегда будет « ДА ».
- Возвращает true , если B можно умножить на любое число, чтобы сделать его равным A+C, т.е. (A + C) % new_b = 0 . Остаток всегда будет равен 0 независимо от значения M .
- Теперь остается только умножить либо A , либо C , чтобы их сумма была равна new_b .
- Если (A + C) > new_b, вернуть false . В этом случае умножение А или С на М только увеличит его значение. Ответ всегда будет « НЕТ ».
- В противном случае, если (new_b – C) % A = 0 , вернуть true . В этом случае A можно умножить на некоторое целое число M . В этом случае (new_b – C) можно рассматривать как кратное A . Следовательно, при делении (new_b – C) на A остаток всегда будет равен 0 независимо от значения M. Ответ будет « ДА » (a согласно уравнению (2)).
- В противном случае, если (new_b – A) % B = 0 , вернуть true . В этом случае C можно умножить на некоторое целое число M . В этом случае (new_b – A) можно рассматривать как кратное C . Следовательно, при делении (new_b — A) на C остаток всегда будет равен 0 независимо от значения M. Ответ будет « ДА » (согласно уравнению (3)).
- В противном случае верните false .
Иллюстрация:
Input: A = 30, B = 5, C = 10
Output: YES
Explanation:
new_b = 2 * B
= 2 * 5
= 10
(A + C) % new_b
(30 + 10) % 10
40 % 10 = 0
This proves that the numbers 30 5 10 are in A.P. after multiplying with some number M.
Ниже приведена реализация вышеуказанного подхода:
Временная сложность: O(1)
Вспомогательное пространство: O(1)