剰余計算機

余り(a mod b)
次へ

剰余(または「mod」)の演算は、整数除算後の余りを返します:17 = 3·5 + 2 なので 17 mod 5 = 2 です。時計算術、暗号、ハッシュ関数、SQLの「N行ごと」パターンの中核です。この計算機は整数または小数のオペランドを受け取り、商と余りを明示的に表示し、言語間の符号規約の違い(負数についてPythonの% ≠ Cの%)を扱います。

a mod b を計算する方法

  1. 1

    被除数(a)と除数(b)を入力

    任意の数。小数と負数も可。

  2. 2

    符号規約を選ぶ

    切り捨て除算(C、Java、Go)、床除算(Python、Ruby、数学の規約)。

  3. 3

    商と余りを読む

    a = q·b + r、rの符号は選んだルールに従います。

  4. 4

    数式を見る

    値を代入することで各ステップが見えます。

負数の2つの規約

正のオペランドでは、すべての規約が一致します:17 mod 5 = 2。負数では言語が異なります。

言語 -17 mod 5 規約
Python, Ruby 3 床(切り下げ)
C, Java, Go, JS -2 切り捨て
数学の教科書 3 床(通常)

床除算: 商は−∞方向に丸められます。余りは常に除数の符号を持ちます:bと同符号。 切り捨て除算: 商はゼロ方向に丸められます。余りは被除数の符号を持ちます:aと同符号。

a = -17b = 5 の場合:

  • 切り捨て: q = -3(0方向に丸め)、r = -17 − (-3)·5 = -2。
  • 床: q = -4(-∞方向に丸め)、r = -17 − (-4)·5 = 3。

規約のもとではどちらも正しいです。言語に合わせて選んでください。

剰余が現れる場所

  • 時間。 1時間の分、曜日、1日の秒、すべてmod算術。
  • ハッシュテーブル。 hash(key) mod table_size がバケットを選びます。
  • ラウンドロビンのスケジューリング。 task_i mod worker_count が仕事を割り当てます。
  • 暗号。 RSAとDiffie-Hellmanは巨大な素数によるmod n の上に構築されます。
  • N行ごと。 SQLで:WHERE id % 3 = 0
  • 偶奇のチェック。 n mod 2 == 0 は偶数を意味します。
  • 交互のパターン。 行のストライプ、1つおきの項目の色付け。
  • 循環バッファ。 (index + 1) mod size で折り返します。

役立つ恒等式

  • (a + b) mod n = ((a mod n) + (b mod n)) mod n
  • (a · b) mod n = ((a mod n) · (b mod n)) mod n
  • (a^k) mod n は高速なモジュラー冪乗でO(log k)で計算できます、大きな数の暗号に不可欠です。
  • 任意の整数aについて a mod 1 = 0
  • a mod a = 0

小数の剰余

実数では、自然な定義は a mod b = a − b · floor(a/b) です。7.5は2.5のちょうど倍数なので 7.5 mod 2.5 = 07.6 mod 2.5 = 0.1

JavaScriptの%演算子は実数に対して動作します。Pythonのfmodは切り捨ての実数modを行い、Pythonの%は床の実数modを行います。

計算例

  • 100 mod 7:100 = 14·7 + 2、よって余り2
  • 25 mod 4:25 = 6·4 + 1、よって余り1
  • -10 mod 3(床):-10 = -4·3 + 2、余り2。(切り捨てなら-1。)
  • 17.5 mod 5:17.5 = 3·5 + 2.5、余り2.5

よくある質問

ほとんどの場合は同義語です。形式的には、「modulo」は数学的(床)の規約を含意することが多く、「remainder」は切り捨て(C方式)の変種を指すことが多いです。名前は言語のドキュメントにも漏れ込みます。重要なときは規約を明記してください。

Pythonは数学の規約(床)に従い、余りの符号を除数に合わせます。CはハードウェアのALUの規約(切り捨て)に従い、余りの符号を被除数に合わせます。どちらも間違いではなく、異なる選択です。

いいえ、ゼロ除算は未定義です。計算機はb = 0に対してエラーを返します。

通常は、はい。負数の扱いについては言語の仕様を確認してください、PythonとRubyはC、Java、Go、JavaScriptと異なります。

2048ビットの数によるRSA方式の計算には、専用のライブラリ(Pythonのpow(a, b, n)、JavaのBigInteger.modPow)を使ってください。この計算機は日常的な値を扱い、暗号グレードのものは扱いません。

関連ツール

このツールは他の言語でも利用できます