なんか登場頻度高い割にいつも混乱するので...ちょっとちゃんと整理したいなと。。。
なんかこうすべきというのがあったらちゃんと勉強したい。
r = 0 のとき
の倍数のうち、 以上となる最小の値を求めたい。
これはいわゆる「 を で割って、あまりを切り上げる処理」に相当するのでわかりやすい
(x + p-1) / p * p
でよさそう。
一般のとき
問題を「 の倍数のうち、 以上となる最小の数」としても一緒なので、
(x - r + p-1) / p * p + r
とすればよさそう。 の場合でもちゃんと と求められる。
p で割って r 余る数のうち x 未満となる最大の数
AGC 026 B - rng_10s (600 点) で使った形だけど、上のから 引けば OK。
(x - r + p-1) / p * p + r - p
ただし、上述の問題の場合、 がすでに の倍数であることがわかっている、という特殊な状況だったので、
x + r - p
でよかった。