剰余(モジュロ)演算とは?
剰余演算は a mod b と表記し、被除数 a を除数(法)b で割ったときに残る「あまり」を返します。プログラミングや数学のあらゆる場面で登場し、時計の計算(12時を超えると0に戻る考え方)、ハッシュ、リストの要素を循環させる処理、割り切れるかの判定、暗号などはすべて剰余演算に支えられています。このツールは正の数・負の数・小数のあまりを計算し、途中式(証明)をステップごとに表示します。
使い方
被除数(a) と 法/除数(b) を入力します。どちらの値も負の数や小数で構いません。符号をすばやく切り替えたいときは +/- ボタンを使ってください。0で割ることは定義されていないため、除数に0は指定できません。結果には、あまり・整数の商・必要に応じた床関数方式(floored)のあまり・そして文章による証明が表示されます。
計算式の解説
この計算機は 切り捨て除算(truncated division) の方式を採用しています。これは C・Java・JavaScript の % 演算子と同じルールです。まず商を0方向に切り捨てて求めます:q = trunc(a / b)。次にあまりを n = a - q*b で求めます。商を床関数ではなく0方向に切り捨てるため、あまりは 被除数 a の符号 を引き継ぎます。例えばこの方式では -5 mod 2 = -1 となります。一方、もう一つの「床関数(floored)」方式(補助的な出力として表示)では 1 となり、こちらは除数の符号を引き継ぎます。
$$\text{a} \bmod \text{b} = \text{a} - \left\lfloor \dfrac{\text{a}}{\text{b}} \right\rceil_{0} \cdot \text{b}$$
$$\begin{gathered} r = \text{a} - q \cdot \text{b} \\[1.5em] \text{where}\quad \left\{ \begin{aligned} q &= \operatorname{trunc}\!\left( \dfrac{\text{a}}{\text{b}} \right) \\ \text{b} &\neq 0 \end{aligned} \right. \end{gathered}$$
計算例
a = 5、b = 2 の場合:商は \(\operatorname{trunc}(5/2) = \operatorname{trunc}(2.5) = 2\)、あまりは \(5 - 2\times 2 = 1\) です。証明:\(5 \div 2 = 2\) あまり 1、そして \(2 \times 2 + 1 = 5\)。したがって \(5 \bmod 2 = 1\) です。小数の例:7.5 mod 2 では \(\operatorname{trunc}(3.75) = 3\) となり、\(7.5 - 3\times 2 = 1.5\) です。
よくある質問
なぜ -5 mod 2 は 1 ではなく -1 なの? このツールはプログラミング言語と同じ切り捨て方式に従っているため、あまりの符号は被除数(a)に合わせられます。除数の符号に合わせた数学的な答え(1)が必要な場合は、床関数方式(floored)の行をご覧ください。
割り切れるかどうかを調べるには? ある数 x が b の倍数であるのは、\(x \bmod b = 0\) のときちょうどです。例えば \(496 \bmod 4 = 0\) なので倍数ですが、\(226 \bmod 4 = 2\) なので倍数ではありません。
除数を0にできますか? いいえ。0での除算は定義されていないため、b = 0 の場合はエラーを返します。