Найдите M, для которых A, B, C образуют AP в заданном порядке, если любой из них умножается на M

Опубликовано: 20 Сентября, 2022

Даны 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)