算法
(数论、缩小枚举范围、鸽巢原理) $O(2019^2)$
注意到,若 $[l, r]$ 中出现 $2019$ 的倍数,那么答案显然是 $0$;另外,当 $i \equiv j \pmod {2019}$ 时,$i\*k \equiv j\*k \pmod {2019}$
所以,我们只需缩小右边界即可,即 $R = \min(R, L + 2019)$
根据鸽巢原理
,$O(2019^2)$ 个数一定会覆盖 $[0, 2018]$
C++ 代码
#include <bits/stdc++.h>
using std::cin;
using std::cout;
using std::min;
using ll = long long;
int main() {
ll l, r;
cin >> l >> r;
r = min(r, l + 2019);
int ans = 2018;
for (ll i = l; i <= r; ++i) {
for (ll j = i + 1; j <= r; ++j) {
int x = i * j % 2019;
ans = min(ans, x);
}
}
cout << ans << '\n';
return 0;
}