考え方
探索範囲を絞ったあと,全探索できる.アライグマ「D問題はa≦bの条件をつけて考えるのだ! a≦ceil(√M)の範囲だけ調べればいいのだ。aを決めたら、abがギリギリM以上になるようなbを求めて、a,bがN以下なら答えの候補なのだ!」
— 競技プログラミングをするフレンズ (@kyopro_friends) April 1, 2023
回答例
import math N, M = map(int, input().split()) ans = 1 << 60 for a in range(1, math.ceil(M ** 0.5) + 1): b = (M + a - 1) // a if 1 <= a <= b <= N: ans = min(ans, a*b) print(-1 if ans == 1 << 60 else ans)
$a > b$となったらbreakとすれば$\sqrt{M}$の計算の必要がない:
Submission #40214986 - AtCoder Beginner Contest 296
Submission #40202236 - AtCoder Beginner Contest 296