ABC133 C問題:Remainder Minimization 2019

問題. Remainder Minimization 2019

非負整数  L, R が与えられる. \min_{L \le i < j \le R} \left( i \times j \bmod 2019 \right) を求めよ.

制約 0 \le L < R \le 2 \times 10^9

解法

任意の非負整数  x, y に対して,
  (x \times y) \bmod 2019 = \left( (x \bmod 2019) \times (y \bmod 2019) \right) \bmod 2019
となるので,任意の  x' \ge L + 2019 に対しては  L \le x < L + 2019 x' \equiv x \bmod 2019 を満たす  x が存在する.したがって,調べるべき区間 [L, \min(L + 2018, R) ] で十分であることが分かる.したがって,この区間は高々 2019 個の整数しか含まないので全探索をしても間に合う.

だいぶ迷ってしまった.剰余の演算の性質とかよく使うのにパッと出てこないのはどうしたらいいんだろう.