GUZAI3ノートブック

友人であるGUZAI3様の依頼で備忘録を書いています。

正整数の除算で小数点以下を切り上げたいときは『分子』に『分母-1』を足す

■やりたいこと

『正の整数 A, B について、Bを最低何倍すればA以上になるか。(答えは整数倍とする。)』を、
プログラムの整数除算(小数点以下切り捨て)で求めたい。

たとえば、A = 7, B = 2 のときは 4 倍。
たとえば、A = 8, B = 4 のときは 2 倍。 (割り切れる時は切り上げない。)

■どうすればよいか

 \frac{A }{B} では切り捨てが発生してしまうが、代わりに  \frac{A + B - 1}{B} で計算できる。

■計算できることの説明

以下のケースに分けて考える。

番号 ケース 期待する答え
A が B より小さい 1 倍
A が B 以上で、A を B で割った余りが 0 A / B 倍
A が B 以上で、A を B で割った余りが 0 でない A / B + 1 倍

以下、行間が空いているかもしれないが、エスパーしてほしい。

ケース①

 \frac{A + B - 1}{B} = \frac{B}{B} + \frac{A-1}{B} = 1 + \frac{A-1}{B}
A - 1 は 0 以上 B 未満なので、第二項は 0 となる。

ケース②

 \frac{A + B - 1}{B} = \frac{A}{B} + \frac{B-1}{B}
B - 1 は 0 以上 B 未満なので、第二項は 0 となる。

ケース③

A を B で割った余りを C とする。
 \frac{A + B - 1}{B} = \frac{A + B + (C - C) - 1}{B} = \frac{A - C}{B} + \frac{B}{B} + \frac{C - 1}{B} = \frac{A}{B} + 1 + \frac{C-1}{B}
C - 1 は 0 以上 B 未満なので、第三項は 0 となる。