Единственный способ, которым я могу расшифровать Max(( (N%a) %b) %N)
, состоит в том, что максимум берется для всех пар a, b
. Если я не прав, пожалуйста, не обращайте внимания на все остальное.
В случае z > N/2
:
Во-первых, обратите внимание, что если a
и b
больше N
, то (N%a) % b
дает N
, поэтому (N%a) %b) %N
дает 1, что неудовлетворительно мало. Поэтому хотя бы один из них должен быть меньше N
.
Во-вторых, обратите внимание (еще лучше, докажите), что максимальное значение N % a
достигается, когда a
равно N/2 + 1
для четных N
и (N + 1)/2
для нечетных ( важно примечание : это половина следующего кратного 2 после N
). Назовите это maximizer
.
Наконец, обратите внимание, что любое значение b
больше, чем по модулю, оставляет его нетронутым. Докажите, что это действительно желаемый максимум.
Теперь у вас достаточно фактов, чтобы придумать эффективную однострочную программу (не забудьте о случае a > N, b = maximizer
).
Та же логика работает для z < N/2
. Найти максимизатор немного сложнее, но все же возможно в O(1)
(см. важное примечание выше).