AT274の技術だったりなかったり

あっとのTECH LOG

競プロのこととか技術のこととか。たまに日常を書きます。

ABC133 C - Remainder Minimization 2019

問題原文

atcoder.jp

問題要旨

 L \leq i < j \leq R となるような  i,  j を選び、  (i × j) \% 2019 を最小化せよ。

  •   1 \leq L < R \leq 10^{9}

解法

 (i × j) \% 2019 は、  (i \% 2019) × (j \% 2019) \% 2019 としてよい。
つまり、どっちかが 2019の倍数なら答えは0になる。
また、  R - L >=  2019 なら、 L から  R までの間に2019の倍数が存在することになり、答えは0。

そうでない場合には、とりうるバターン数は  2019^{2} 以下におさまるので、全探索できる。

実装

L, R = map(int, input().split())
if R - L >= 2019:
    print(0)
else:
    ans = float('inf')
    for i in range(L, R + 1):
        for j in range(i + 1, R + 1):
            ans = min(ans, (i * j) % 2019)
    print(ans)

感想

なんか本番どハマりした記憶があって解きなおしてみたけど、スッと解けた。
本番何があったんだろう。。。