剰余演算計算機

a mod n、剰余の加算・乗算・累乗(aᵇ mod n)を計算 — 時計算をその場で。

1,255回閲覧

モジュラー演算の仕組み

a mod n が問うのはただ一つ、単純な問いです — a を n で割ったときに残る余りは何か、ということです。形式的には a mod n = a − n × floor(a ÷ n) と定義され、数学の慣習では結果は常に 0 から n−1 の間に収まります。これを直感的にイメージする最も分かりやすい方法は時計の文字盤です — 時間は永遠に数え続けるのではなく、12(または24)で一周して元に戻ります。たとえば今が15:00で、10時間後の時刻を知りたいとします — 「25:00」にはならず、(15 + 10) mod 24 = 1 を計算し、それは翌日の01:00になります。あらゆる値は同じ「枠」の集合をぐるぐると巡り、その巻き戻り(wrap-around)こそが a mod n における n の役割そのものです。

この計算機は同じ考え方を関連する3つの演算に拡張します — 剰余の加算 (a + b) mod n、剰余の乗算 (a × b) mod n、そして剰余の累乗 aᵇ mod n です。最後の演算は一見単純に見えますが、現代暗号理論において最も重要な演算です。これを素朴な方法で計算しようとすると — まず a を b 乗し、その後で余りを取る — 実運用の鍵長では、剰余の計算にたどり着く前に数百万桁にも及ぶ数値が発生してしまいます。そこでこのツールは二乗と乗算を繰り返す「二乗・乗算法(square-and-multiply)」を使用します — 底を毎回二乗し、そのたびに n で剰余を取ることで、b がどれほど大きくても、途中の数値が n 自体のサイズを超えて膨らむことはありません。これにより、数百桁にも及ぶ指数であっても正確な結果を得ることが可能になります。

知っておくべきこと

  • 暗号理論: RSAとDiffie-Hellman鍵交換はいずれも非常に大きな素数を用いた剰余の累乗の上に成り立っています — メッセージを暗号化するとは、本質的には a、b、n がそれぞれ数百桁にも及ぶ aᵇ mod n を計算することです。
  • ハッシュ関数: ほとんどのハッシュ方式は、任意サイズの入力を剰余演算によって固定サイズの「バケット」に落とし込みます。これがハッシュテーブル、チェックサム、負荷分散のロジック全般に mod が現れる理由です。
  • カレンダーと時計: 曜日の計算、12時間制・24時間制の時刻変換、カレンダーの周期は、すべて姿を変えたモジュラー演算です — 「時計算」という呼び名も、まさにここから来ています。
  • 符号の扱いは言語によって異なる: 数学では a mod n は常に非負として定義されますが、多くのプログラミング言語(C、JavaScript、Javaなど)は代わりに a と同じ符号を持つ余りを返します。数式をそのままコードに落とし込むと、これが原因で誤りが生じることがあります。

よくある質問

−7 mod 3 はいくつですか?

このツールは結果が常に非負になるという数学の慣習に従います:−7 mod 3 = 2(−7 = −3×3 + 2 のため)。一部のプログラミング言語は代わりに−1を返します。これは剰余を「常に正」ではなく「被除数と同じ符号」として定義しているためです。

aᵇ mod n は実生活のどこで使われますか?

RSAとDiffie-Hellman鍵交換の中核となる演算です — メッセージを暗号化したり共有鍵に合意したりすることは、本質的にはしばしば2048ビット以上の巨大な剰余の累乗を計算することを意味します。

時計の例ではなぜmod 12ではなくmod 24を使うのですか?

どちらも成り立ちます — 12時間制の時計はmod 12で一周し、24時間制の時計はmod 24で一周します。法(モジュラス)n は単に着目している周期の大きさにすぎません。自分の時間の数え方に合う方の時計の慣習を選べばよいのです。

a mod n は整数除算と同じですか?

両者は同じ割り算の二つの側面です。a ÷ n(整数除算)は商を与えます — n が a に何回ちょうど収まるか — 一方 a mod n は余りを与えます。商 × n + 余り は常に a を再構成します。

なぜ二乗・乗算法はaᵇを直接計算するより速いのですか?

直接的な累乗計算は a を b−1 回自分自身と掛け合わせるため、n で剰余を取れるようになるずっと前に、途中の値の桁数が爆発的に増えてしまいます。二乗・乗算法は逆に、二乗するたびに剰余を取るため、関与する数値はおおよそ n のサイズを超えて大きくなることがありません — 暗号鍵のサイズでは宇宙の年齢より長くかかっていた演算を、数ミリ秒で終わる演算に変えるのです。

コメント

まだコメントはありません — 最初のコメントを書いてみましょう!

関連ツール