メインコンテンツへスキップ
CalcMax

剰余計算

範囲:-1,000,000,000〜1,000,000,000

範囲:-1,000,000,000〜1,000,000,000

計算結果

-47 ≡ 3 (mod 5)

合同式

余り
3

ある整数を別の整数で割ったときに残る、負にならない最小の余りを剰余と呼びます。剰余計算の結果は、このページでは合同式として書き出します。−47 ≡ 3 (mod 5) のように。剰余は、2つの数の符号がどうであれ、常に0以上で法の絶対値より小さい値です。負の数を相手にしても剰余演算が成り立つのは、この1つの決めごとのおかげです。「−47 % 5」をプログラミング言語に尋ねると、答えは言語によって分かれます。JavaScript・C・Java・Goは−2を返し、Pythonは3を返します。そのうち数学的な剰余と呼べるのは1つだけで、それは決して負にならないほうです。このページは−10億から10億までの整数を2つ受け取り、剰余と、被除数・剰余・法をつなぐ等式の両方を印字します。入力にそれ以外の条件はありません。被除数は負でもよく、法も負でよく、被除数のほうが法より小さくてもかまいません。断るのは法が0のときだけです。0で割ることはできないので、mod 0には答えるべき値がありません。

4つの符号の組み合わせと、それぞれが生む合同式

被除数法剰余合同式
-4753-47 ≡ 3 (mod 5)
-121-1 ≡ 1 (mod 2)
475247 ≡ 2 (mod 5)
47-5247 ≡ 2 (mod -5)

1行目と3行目を並べて読んでください。被除数は片方が−47、もう片方が47で、法はどちらも5、剰余は3と2です。この組がこのページの要点です。多くの電卓とプログラミング言語が使う口径では、1行目は−2と印字されます。それが3と印字されることこそ、余りと剰余の違いです。次に1行目と2行目を読んでください。被除数はどちらも負のまま、法は5から2へ半分になっています。剰余は3から1へ変わりましたが、これは剰余が法に比例するという話ではありません。剰余は周期の長さではなく、被除数がその周期のどこに落ちるかで決まります。4行目は法が−5で、法が5の3行目とまったく同じく2と答えます。符号を気にしないことが、この1つの比較で見て取れます。4行のどれでも、被除数から剰余を引いて確かめてください。結果は必ず法の整数倍になり、それが合同式の主張そのものです。

公式

−47 ÷ 5 = −9あまり−2、−2 + 5 = 3 ⇒ −47 mod 5 = 3、−47 ≡ 3 (mod 5)

a
被除数、つまり割られる数です。負でもかまいません。そこがこのページの勘所で、a mod nはaが負でも負になってはいけないので、−47は−2ではなく3に着地します。−10億から10億までの整数を受け付け、0も立派な被除数で、その剰余は常に0です。
n
法、つまり割るほうの数です。これも負でかまいませんし、符号が変わっても剰余は変わりません。「47 mod −5」と「47 mod 5」はどちらも2です。理由は、nがa − rを割り切るという文と、−nがa − rを割り切るという文が同じことを言っているからです。断る値は0だけで、そのときもページはnを絶対値に置き換えず、入力されたとおりに印字します。
r
剰余、つまり答えです。aから取り去ってもnの倍数が残る、負でない最小の数です。2つの条件で完全に決まります。rは0以上、そしてrはnの絶対値より小さい。−47 mod 5が3になるのは、−47 − 3 = −50が5の倍数になる負でない最小の値が3だからです。
((a mod n) + |n|) mod |n|
このページがたどる2段階の手順と、2段目が必要な理由です。1段目は多くの言語が計算しているもので、負の答えを返すことがあります。2段目は法の絶対値を足して、もう一度同じ法で割ります。nの倍数のどれを基準に測っているかは変えずに、結果を負でない区間へ押し込む働きです。nそのものではなくnの絶対値を使うことで、負の法もそのまま通ります。
a ≡ r (mod n)
合同式で、結果パネルの1行目です。nがa − rをちょうど割り切る、という主張です。剰余を単独で書いたものと同じ内容で、法と被除数が並べて名指しされます。3本線の記号とmodというキーワードは言葉ではなく記法なので、サイトのどの言語でも同じように印字され、数字に千位の区切りは入りません。
−47 ≡ 3 (mod 5)
既定の入力を書き下したものです。このページを余りの計算ページと分ける1行でもあります。同じ2つの数が、電卓が使う切り捨ての口径では−9あまり−2になり、ここでは−47 ≡ 3 (mod 5)になります。−47の代わりに47を入れると3ではなく2になるので、マイナス1つ分で答えが周期を1つ分ずれます。

答えが止まらずに周回してほしいときは、このページの出番です。時計が最も古い例で、10時の5時間後は15 mod 12で3時になります。剰余が決して負にならないことが、文字盤を読めるままに保っているのです。暦の計算も同じ形をしています。通日や、ある日付が何曜日にあたるかは、7を法とした剰余です。プログラミングでは、ある数が別の数を割り切るかどうかの判定(a mod nが0ならnで割り切れる)、環状バッファやハッシュ表で添字を範囲内に畳み戻す処理、決まった範囲で回り続けるカウンタ、リストから順番に1つずつ選ぶ処理が、すべて剰余です。暗号はその上に建っています。RSAもDiffie-Hellmanも巨大な数どうしの剰余演算で、剰余を負でないと決めてあるのは、符号つきの答えでは曖昧すぎてその上に組み立てられないからです。チェックディジットは、銀行口座番号からISBNまで、9・10・11を法とした剰余です。代わりに「何回入って何が残るか、自分の電卓の口径では」を知りたいときは余りの計算ページのほうが向いています。2つの口径を並べて見せてくれるからです。2つの数に共通するものは何かを知りたいときは、最大公約数のページが直接答えます。

計算例

  1. 符号の落とし穴:−47 mod 5

    1. ふつうに割って小数を捨てます。−47 ÷ 5 = −9.4なので、切り捨てた商は−9です
    2. −9 × 5 = −45で、−47 − (−45) = −2なので、切り捨ての余りは−2です
    3. 剰余は0以上でなければならないので、法の絶対値を足します。−2 + 5 = 3です
    4. 結果が範囲に入っているか確かめます。0 ≤ 3 < 5なので、これ以上調整は要りません
    5. 合同式を読みます。−47 ≡ 3 (mod 5)、つまり5は−47 − 3 = −50をちょうど割り切ります

    既定の入力であり、このページがなぜ存在するかを説明する1問です。電卓でも多くのプログラミング言語でも、この割り算は−9あまり−2と報告されます。その答えは間違いではなく、別の言い方をした問いに答えているだけです。ここでの剰余が3なのは、5の倍数を残す負でない最小の値が3だからです。47 mod 5が2であって、−3でも3でもないことに注目してください。被除数が周期を1つ分動くと剰余も1つ分動くので、1つのマイナス記号が答えをいちばん近い別の値へ動かします。

  2. 法が負の場合:47 mod −5

    1. 47 ÷ 5 = 9.4なので、5は9回入り、9 × 5 = 45です
    2. 47 − 45 = 2で、これはすでに0 ≤ 2 < 5の区間に入っています
    3. 法は負ですが、割り切れるかどうかに符号は関係ありません。−5は45をちょうど割り切るので、47 − 2も割り切ります
    4. 合同式は入力どおりの法で書きます。47 ≡ 2 (mod −5)

    剰余が法の符号に左右されないことを示す1問です。−5を5に置き換えても答えは何も変わりません。−5がある数を割り切るのは、5がそれを割り切るときだからです。このページは印字する合同式からマイナスを黙って落とすことをせず、そのまま残します。−5を5と書き換えると、入力が捨てられたように見えるからです。参考表の3行目と4行目を見比べてください。法が5と−5で違うのに、剰余はどちらも2です。剰余を動かすのは被除数の符号だけです。

  3. ふつうの場合:1,234 mod 12

    1. 12 × 100 = 1,200で、1,234 − 1,200 = 34なので続けます。12 × 2 = 24で、34 − 24 = 10が残ります
    2. 12 × 3 = 36は34を超えてしまうので、商は102で残りは10です
    3. 10は0以上で12より小さいので、すでに剰余です
    4. 合同式として読みます。1,234 ≡ 10 (mod 12)

    2つとも正の数のふつうの場合で、剰余と通常の余りが一致します。それを載せているのがこの1問の意味です。どちらも正なら食い違いは起きず、ページはどの余りツールと同じ仕事をしています。面白いのはマイナス記号の入った行のほうです。この組にはもう1つ読めるところがあります。1,234 mod 12は、12時間の文字盤でいうと何時になるかを尋ねるのと同じ形で、10はちゃんとした時刻ですが−2はそうではありません。

適用限界

法に0は使えません。0で割ることに答えはないので、報告すべき余りもなく、まして負でない最小の余りなどありません。このページは、結果に見える代わりの値を返すのではなく、入力を断ります。2つの数はどちらも整数でなければなりません。小数の法には数学の一部の分野で独自の定義がありますが、このページが実装しているものではないので、47.5は黙って48に丸めて答えるのではなく拒否します。それぞれの数の大きさの上限は10億です。これで途中の計算がすべて、倍精度数が整数を正確に表せる範囲に収まります。それを超えると計算が丸め始め、答えはごく普通に見えたまま間違ったものになります。このページが出すのは剰余と合同式だけで、商は出しませんし、あなたの被除数と合同なほかの数も並べませんし、同時に2組を超える剰余計算もしません。負の法は受け付け、入力されたとおりに印字するので、同じことを言っている2つの合同式が違って見えることがあります。47 ≡ 2 (mod −5)と47 ≡ 2 (mod 5)は同じ主張です。最後に、下の参考表は4組の固定した組み合わせを出すだけで、あなたの入力には追随しません。入力した数に答えるのは結果パネルのほうです。

よくある質問

なぜ−47 mod 5は−2ではなく3なのですか
剰余は、被除数から引いても法の倍数が残る、負でない最小の数として定義されているからです。−47 − (−2) = −45も、−47 − 3 = −50も5の倍数なので、算術だけではどちらも候補から外れません。決めているのは定義のほうです。剰余は0から法の手前までの区間に住んでいて、−2はその外にあります。あとはすべてそこから出てきます。プログラミング言語が返す値は、その言語がどちらの口径を選んだかで変わります。JavaScript・C・Java・Goはもう一方を選び、符号を被除数に従わせます。Pythonはこちらを選びました。どちらの言語も壊れているわけではなく、違う言い方の問いに答えているだけです。
法は負でもよいのですか
はい、そして剰余はその符号に左右されません。負の法が成り立つのは、割り切れるかどうかに符号が関係しないからです。−5がある数を割り切るのは5が割り切るときと同じなので、−5の倍数の集合は5の倍数の集合と同じになり、その中の負でない最小の数も同じになります。このページは−5を5に置き換えず、入力されたとおりに印字します。入力を書き換えると符号が落ちたように見えるからです。47 mod −5は2で、47 mod 5も2です。印字される2つの合同式は、片方にマイナスが付くことだけが違います。
法に0を入れるとどうなりますか
入力を断ります。mod 0には報告できる値がありません。0が割り切るのは0だけなので、被除数を測る基準になる0の倍数が存在せず、取るべき余りもありません。0を返したり、被除数をそのまま返したりすれば、答えのように見えてしまいますが、どの入力に対しても間違っています。入力を断るのが正直な結果です。0で割ることが算術のどこでも定義されていないのも、同じ理由です。
このサイトの余りの計算ページと同じものですか
いいえ、同じ割り算に違う答えを返します。それが両者の違いをいちばんはっきり見せる道です。余りの計算ページは2つの口径を並べて選ばせます。筆算の口径は実際に2つ流通していて、教室ではどちらを教えてもおかしくないからです。このページは選択肢を出しません。moduloの読み方は1つしかなく、答えは決して負にならないからです。−47を5で割る場合、余りの計算ページは既定の口径で−9あまり−2を出し、このページは合同式−47 ≡ 3 (mod 5)を出します。特定の2つの数で2つの口径がどう違うかを見るにはあちらを、剰余そのものが欲しいときにはこちらを使ってください。
剰余は実際どこで使われますか
数え上げが止まらずに周回してほしいところすべてです。時計の文字盤が日常の例で、12時間ぶんの目盛りがあれば、10時の5時間後は15 mod 12で3時になります。曜日も7を法として同じように動きます。プログラミングでは、a mod nが0のときに限ってnが割り切るので、剰余は割り切れるかどうかの判定になります。環状バッファやハッシュ表では、端まで行った添字を先頭に戻すために使います。決まった範囲で回り続けるカウンタにも使います。公開鍵暗号は巨大な数どうしの剰余演算そのもので、負でないという約束が効いてくるのはそのためです。符号つきの結果を出す算術は、その上に組み立てるには曖昧すぎます。
なぜ商ではなく合同式だけを出すのですか
商は剰余の主張の一部ではないからです。合同式は被除数・剰余・法を名指しし、その主張は「法が前の2つの差を割り切る」というものです。この文は商がなくても完全です。商は法が何回ちょうど入るかを尋ねたときに得られる数で、その問いは筆算の側に属しています。商も並べて見たいときは、余りの計算ページと割り算の筆算のページがどちらも報告します。剰余だけをもう一度単独でも印字しているので、数だけ欲しい読者は文から読み取らなくてすみます。結果パネルの2行目です。

参考文献

関連する計算ツール