ABC 296
Table of Contents
D - M<=ab
https://atcoder.jp/contests/abc296/tasks/abc296_d
解説 AC。
条件より $X = ab \wedge X \geq M$ である。また $a,b$ は対称だから $a \leq b$ としても答えは変わらない。
\begin{align} M \leq X &= ab \Leftrightarrow \nonumber \\ \frac{M}{a} &\leq b \nonumber \\ \biggl\lceil \frac{M}{a} \biggr\rceil &\leq b \nonumber \\ \end{align}
$\lceil M/a \rceil$ は $b$ の下界だから $a \leq b$ と合わせて
\begin{align} &a \leq \biggl\lceil \frac{M}{a} \biggr\rceil \nonumber < \frac{M}{a} + 1 \nonumber \\ \Leftrightarrow ~ &a(a-1) < M \nonumber \end{align}
がいえる。よってせいぜいこの範囲の $a$ を探索すれば良い。
($a$ が $\sqrt{M}$ を超えると $a, b$ の大小関係が逆転する)
void solve() {
ll N, M;
cin >> N >> M;
ll ans = INF;
for (ll a = 1; a * a - a < M; a++) {
ll b = (M + a - 1) / a;
if (a <= N && b <= N) {
chmin(ans, a * b);
}
}
if (ans == INF)
ans = -1;
cout << ans << endl;
}