途中で剰余をとるとは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > ウィキペディア小見出し辞書 > 途中で剰余をとるの意味・解説 

途中で剰余をとる

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/10/11 10:07 UTC 版)

冪剰余」の記事における「途中で剰余をとる」の解説

次の計算方法は、手順増やすことになるが、結果としてはこのアルゴリズムのほうが能率良い2つ整数式 a と b があるとき、 ( a × b ) mod m = ( ( a   mod   m ) × ( b   mod   m ) ) mod m {\displaystyle (a\times b){\bmod {m}}=((a\ {\mbox{mod}}\ m)\times (b\ {\mbox{mod}}\ m)){\bmod {m}}} である。したがって最後に剰余演算1回行うのではなく、前の演算結果 a と b のそれぞれについて m を法とする剰余をとってから乗算をしても、計算結果変わらない。 たとえば、53 mod 13計算するときに、(53 = 52 × 5 であるから次のように計算できる。 まず、52 mod 13 = 25 mod 13 = 12計算する次に、(12 × 5) mod 13 = 60 mod 13 = 8 として、結果得られる。 これによって、剰余算回数1回から O(log(e)) 回に増えるが、乗算および剰余算計算コスト被演算数桁数によるので、結果としてはこのアルゴリズムのほうが能率良い。また一般に、m がその計算機環境における1語の桁数半分以下に収まる場合 (a mod m) × (b mod m) の結果が必ず1語に収まるので、Bignum を一切使わない能率良い計算が可能である。 次の例は、基本としてこの手法を利用し、さらに指数法則の b2x = (b2)x を活用したコードであり、ほぼ C# または C++コードとなっている。クラス Bignum は任意の巨大な整数表現できるものとする引数 b は底、e は指数、m は法である。記号 "%" は、剰余演算 (mod) を示す。 Bignum modpow(Bignum b, Bignum e, Bignum m) { Bignum result = 1; while (e > 0) { if ((e & 1) == 1) result = (result * b) % m; e >>= 1; b = (b * b) % m; } return result;} このコードは、Schneier (1995, p. 244)にあるものに基づいており、一つwhile ループ冪剰余計算必要な全ての作業行っている。 例として、b = 4, e = 13, m = 497この手法で計算する。e を2進数表記すると 1101 になる。e が2進数では4桁なので、ループは4回し回らないループ最初に入ったとき、各変数の値は b = 4, e = 1101(2進数), result = 1 である。e の右端ビットは 1 なので、result は (1 × 4) % 497 つまり 4 となる。e は右にシフトされて 110(2進数)となり、b は (4 × 4) % 497 すなわち 16 になる。 繰返し2回目では、e の右端ビットは 0 なので result は 4 のままとなる。e は右にシフトされて 112進数)となり、b は (16 × 16) % 497 つまり 256 となる。 繰返し3回目では、e の右端ビットは 1 なので result は (4 × 256) % 497 すなわち 30 となる。e は右にシフトされて 1(2進数)となり、b は (256 × 256) % 497 つまり 429 となる。 繰返し4回目では、e の右端ビットは 1 なので result は (30 × 429) % 497 すなわち 445 となる。e は右にシフトされて 0 となり、b は (429 × 429) % 497 つまり 151 となる。 e が 0 になるとループ終了し結果として 445得られる。これは前述アルゴリズム結果とも一致する

※この「途中で剰余をとる」の解説は、「冪剰余」の解説の一部です。
「途中で剰余をとる」を含む「冪剰余」の記事については、「冪剰余」の概要を参照ください。

ウィキペディア小見出し辞書の「途中で剰余をとる」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「途中で剰余をとる」の関連用語

1
8% |||||

途中で剰余をとるのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



途中で剰余をとるのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaの冪剰余 (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2024 GRAS Group, Inc.RSS