算法
(暴力枚举) $O(n)$
注意到 $A$ 和 $B$ 的范围都是 $2e5$,所以我们可以考虑枚举 gcd
,范围是 $1 \sim 2e5$
对于每个 gcd
,不妨记做 $i$,先算出 $i$ 的不超过 $B$ 的最大倍数,再验证下这个数和 $i$ 的差值是否至少是 $a$,如果是,则更新答案。
C++ 代码
#include <bits/stdc++.h>
#define rrep(i, n) for (int i = 1; i <= (n); ++i)
using std::cin;
using std::cout;
using std::max;
using std::vector;
int main() {
int a, b;
cin >> a >> b;
int ans = 0;
rrep(i, 200000) {
int x = b / i * i;
if (x - i >= a) ans = max(ans, i);
}
cout << ans << '\n';
return 0;
}