数学、特に算術の分野では、整数aのモジュラー乗法逆元とは、積ax が法mに関して 1 と合同となるような整数xのことである。[ 1 ]モジュラー算術の標準的な表記では、この合同は次のように表される。
これは、 m が量ax − 1を割り切る(均等に割り切る)という記述の略記法であり、言い換えれば、ax を整数mで割った余りは1 である。aが法mに関して逆元を持つ場合、この合同式の解は無限に存在し、この法に関して合同クラスを形成する。さらに、 aと合同な任意の整数(つまり、aの合同クラスに属する整数)は、xの合同クラスの任意の要素を法乗法逆元として持つ。wを含む合同類を示すために、これは合同類の乗法逆元を法とする、と表現できます。合同類はすなわち、
シンボルは、 mを法とする同値類の乗算を表します。[ 2 ] このように記述すると、有理数または実数の集合における乗法逆元という通常の概念との類似性が明確に表され、数値を合同類に置き換え、二項演算を適切に変更します。
実数に対する同様の演算と同様に、この演算の基本的な用途は、可能な場合には次の形式の線形合同式を解くことである。
モジュラー乗法逆元を求めることは、公開鍵暗号やRSAアルゴリズムなどの暗号分野でも実用的な応用があります。[ 3 ] [ 4 ] [ 5 ]これらのアプリケーションのコンピュータ実装における利点は、モジュラー乗法逆元の計算に使用できる非常に高速なアルゴリズム(拡張ユークリッドアルゴリズム)が存在することです。
与えられた正の整数mに対して、2 つの整数aとbは、 m がそれらの差を割り切る場合、法mに関して合同であると言われます。この二項関係は次のように表されます。
これは整数の集合上の同値関係です。、そして同値類は法mの合同類または法mの剰余類と呼ばれる。整数aを含む合同類を表すと、[ 6 ]すると
線形合同式は、次の形式のモジュラー合同式である。
実数上の線形方程式とは異なり、線形合同式は解がゼロ、1つ、または複数存在する場合があります。xが線形合同式の解である場合、も解なので、線形合同式の解の数について話すときは、解を含む異なる合同式のクラスの数を指しています。
d がaとmの最大公約数である場合、線形合同式ax ≡ b (mod m )は、 d がbを割り切る場合に限り解を持ちます。dがbを割り切る場合、解はちょうどd個あります。[ 7 ]
整数aの法mに関するモジュラー乗法逆元は、線形合同式の解である。
前述の結果によれば、解が存在するのはgcd( a , m ) = 1 の場合のみであり、つまりaとm は互いに素(つまり互いに素)でなければなりません。さらに、この条件が満たされる場合、解はちょうど 1 つだけ存在し、つまり存在する場合は、モジュラー乗法逆元は一意です。[ 8 ] bとb' が両方とも法mに関するaのモジュラー乗法逆元である場合、
したがって
a ≡ 0 (mod m )の場合、gcd( a , m ) = mとなり、aはモジュラー乗法逆元を持ちません。したがって、b ≡ b' (mod m )となります。
ax ≡ 1 (mod m )が解を持つ場合、それはしばしば次のように表記される。
しかし、これは表記法の濫用とみなされる可能性があり、(これは、モジュラー乗法逆元とは異なり、 aが1または-1の場合を除いて整数ではない)。aを合同類を表すトークンとして解釈すれば、この表記は適切である。合同類の乗法逆元は、次のセクションで定義される乗法を持つ合同類である。
mを法とする合同関係は、整数の集合をm個の合同クラスに分割します。これらのm個の対象に対して、加算と乗算の演算は次のように定義できます。2 つの合同クラスを加算または乗算するには、まず各クラスから代表元を (任意の方法で) 選び、次にその 2 つの代表元に対して通常の整数演算を実行し、最後に整数演算の結果が属する合同クラスを、合同クラスに対する演算の結果として取ります。記号で表すと、これらの定義は次のようになります。
そして
どこそして左側の記号は、mを法とする合同類の加算と乗算を表します。これらの演算は明確に定義されており、最終結果は結果を得るために選択された代表値に依存しません。
これら2つの定義された演算を持つm個の合同類は、 mを法とする整数環と呼ばれる可換環を形成する。これらの代数的対象にはいくつかの表記法が用いられており、最もよく用いられるのはまたはしかし、いくつかの初歩的なテキストや応用分野では、簡略化された表記法が使用されています。他の代数的対象との混同が起こりにくい場合。
mを法とする整数の合同類は、伝統的にm を法とする剰余類として知られており、これは合同類のすべての要素がmで割ったときに同じ剰余(つまり「剰余」)を持つという事実を反映しています。それぞれが異なるm を法とする合同類から選ばれるように選択された m 個の整数の集合は、 mを法とする剰余の完全系と呼ばれます。[ 9 ]除算アルゴリズムは、整数の集合{0, 1, 2, ..., m − 1}がmを法とする剰余の完全系を形成し、mを法とする最小剰余系として知られていることを示しています。算術問題を扱う際には、剰余の完全系を扱い、合同の言語を使用する方が便利な場合もあれば、環の合同類の観点から考える方が便利な場合もあります。の方がより有用である。[ 10 ]
mを法とする完全剰余系のすべての要素が法乗法逆元を持つわけではありません。たとえば、m > 1の場合、0 は法乗法逆元を持ちません。m と互いに素でない要素を完全剰余系から取り除いた後に残るものを簡約剰余系と呼び、そのすべての要素が法乗法逆元を持ちます。簡約剰余系の要素の数は、 どこはオイラーのトーシェント関数、つまりmより小さい正の整数のうち、 mと互いに素な整数の数です。
単位元を持つ一般環では、すべての要素が乗法逆元を持つわけではなく、乗法逆元を持つ要素は単位元と呼ばれます。2 つの単位元の積は単位元であるため、環の単位元は群を形成し、環の単位元群と呼ばれ、 R が環の名前である場合はR ×と表記されることがよくあります。m を法とする整数環の単位元群は、 mを法とする整数の乗法群と呼ばれ、既約剰余系と同型です。特に、位数(サイズ)を持ち、。
mが素数、例えばpである場合、そして、すべての非ゼロ要素乗法逆元を持つので、は有限体である。この場合、pを法とする整数の乗法群は位数p − 1の巡回群を形成する。
任意の整数に対して常にそうなるは、のモジュラー乗法逆元である。弾性率に関して、 以来例としては、、、等々。
次の例では法10を使用します。2つの整数が法10で合同であるのは、それらの差が10で割り切れる場合のみです。
この法に関する10種類の合同類のうちのいくつかは以下のとおりです。
線形合同式4 x ≡ 5 (mod 10) には解がありません。なぜなら、5 に合同な整数 (つまり、)はすべて奇数ですが、4xは常に偶数です。ただし、線形合同式4x ≡ 6 (mod 10)には、x = 4とx = 9 の2 つの解があります。gcd (4, 10) = 2であり、2 は 5 を割り切れませんが、6 を割り切ります。
gcd(3, 10) = 1なので、線形合同式3 x ≡ 1 (mod 10) には解が存在し、つまり 3 の法 10 のモジュラー乗法逆元が存在します。実際、7 はこの合同式を満たします (つまり、21 − 1 = 20)。しかし、他の整数もこの合同式を満たします。例えば、17 と −3 (つまり、3(17) − 1 = 50 と 3(−3) − 1 = −10)。特に、すべての整数はこれらの整数は、ある整数rに対して7 + 10 rの形をしているため、合同式を満たします。
は10で割り切れる。この合同式には、この合同式の解のクラスが1つだけ存在する。この場合の解は、考えられるすべてのケースを調べることで得られるが、より大きな法に対しては体系的なアルゴリズムが必要となり、それらは次のセクションで説明する。
合同類の積そして要素を選択することで取得できます例えば25、そして要素例えば −2 とすると、それらの積 (25)(−2) = −50 は合同クラスに属することがわかります。。 したがって、加算も同様に定義されます。10 個の合同クラスと、これらの合同クラスの加算と乗算の演算は、10 を法とする整数環を形成します。。
10 を法とする完全剰余系は、{10, −9, 2, 13, 24, −15, 26, 37, 8, 9} の集合で表すことができ、各整数は 10 を法とする異なる合同類に属します。10 を法とする唯一の最小剰余系は {0, 1, 2, ..., 9} です。10 を法とする簡約剰余系は {1, 3, 7, 9} です。これらの数で表される任意の 2 つの合同類の積は、再びこれら 4 つの合同類のいずれかになります。これは、これら 4 つの合同類が群を形成し、この場合は位数 4 の巡回群であり、3 または 7 のいずれかを (乗法) 生成元とすることを意味します。表される合同類は、環の単位群を形成します。これらの合同類は、まさにモジュラー乗法逆元を持つ合同類である。
mを法とするaのモジュラー乗法逆元は、拡張ユークリッドアルゴリズムを用いて求めることができる。
ユークリッドの互除法は、2 つの整数aとmの最大公約数 (gcd) を求めます。aが法mに関して乗法逆元を持つ場合、この gcd は 1 になります。この互除法によって生成されるいくつかの方程式のうち最後の方程式を解くと、この gcd を求めることができます。次に、「後退代入」と呼ばれる方法を使用して、元のパラメータとこの gcd を関連付ける式を得ることができます。言い換えれば、ベズーの恒等式を満たす整数xとyを見つけることができます。
書き直した、これは
つまり、
つまり、 aのモジュラー乗法逆元が計算された。このアルゴリズムのより効率的なバージョンは拡張ユークリッドアルゴリズムであり、補助方程式を使用することで、アルゴリズムの 2 回の実行 (逆代入はアルゴリズムを逆方向に実行することと考えることができる) を 1 回に減らす。ビッグ O 記法では、このアルゴリズムは、 | a | < mを仮定してO(log 2 ( m ))の時間で実行され、非常に高速で、一般的に代替手段であるべき乗よりも効率的であると考えられている。

例えば、モジュラー乗法逆元は弾性率に関してはだけでなく、つまり、リングの中で残基クラス逆関数と可逆である
なぜなら
隣接する計算によると。最初のステップでは、ユークリッド除算に対応して「は余りあり「、方程式方程式に追加されますこれは、左側の残余がその上に立つ(または一般的に)(負の剰余も許容される場合)。対応する右端の表では、同様の行操作で、明らかに省略できる。-列。最後に、直接確認できます:
で
拡張ユークリッドアルゴリズムの代替として、オイラーの定理を使用してモジュラー逆数を計算することができます。[ 11 ]
オイラーの定理によれば、a がmと互いに素である場合、つまりgcd( a , m ) = 1ならば、
どこはオイラーのトーシェント関数である。これは、 a が乗法群に属するという事実から導かれる。×は、 a がmと互いに素である場合に限り 成り立つ。したがって、モジュラー乗法逆元は直接求めることができる。
mが素数である特別な場合、そしてモジュラー逆元は次のように与えられる。
この方法は一般的に拡張ユークリッドアルゴリズムよりも遅いですが、モジュラべき乗の実装が既に利用可能な場合に使用されることがあります。この方法の欠点としては、以下のようなものがあります。
この手法の注目すべき利点の1つは、 aの値に依存する条件分岐が存在しないため、公開鍵暗号において重要な秘密情報となる可能性のあるaの値をサイドチャネル攻撃から保護できることです。このため、 Curve25519の標準実装では、逆行列を計算するためにこの手法が用いられています。
複数の数a iの逆数を共通のmで割った値を、ユークリッドアルゴリズムを 1 回呼び出し、追加の入力ごとに 3 回の乗算を行うことで計算することが可能です。[ 12 ]基本的な考え方は、すべてのa i の積を作り、それを反転し、次にすべてのj ≠ iに対してa jを掛けて、目的のa −1 iだけを残すことです。
より具体的には、アルゴリズムは(すべての算術演算はmを法として実行される):
並列コンピューティングを活用するために、乗算を線形ではなくツリー構造で実行することが可能です。
モジュラスMが次の形式の場合ある素数pと正の整数mに対して、ニュートン・ラフソン反復法を用いることでモジュラー乗法逆元を効率的に計算することが可能であり、逆元は次のように計算できる。乗算。次のことが示せる。
(つまり、xはある素数のべき乗を法とするaのモジュラー乗法逆元である))、 それから
つまり、まず素数pまたはその小さなべき乗を法とするaのモジュラー乗法逆数を計算し、次にニュートン・ラフソン法を繰り返して、より大きな素数のべき乗を法とする逆数を計算することで、モジュラー逆数計算を実行できるということである。nの値が徐々に大きくなるにつれて。[ 13 ] [ 14 ]
この方法の実用的な用途は、2 のべき乗を法とするモジュラー乗法逆数を効率的に計算することです。このような計算を行うには、すべての奇数が 2 のべき乗を法とする自身のモジュラー乗法逆数であることに注目することから始めることができます。検査によって明らかになるように:
、、、、
そして、ニュートン・ラフソン反復法を繰り返し用いて、モジュラー逆数をモジュラーで計算する。、、等々。
例えば、C プログラミング言語では、uint64_tデータ型に対する加算、減算、乗算はすべて剰余演算で行われます。奇数aの法乗法逆元を計算することができます。ニュートン・ラフソン法を5回反復する以下の関数を使用します。
#include <stdint.h> uint64_t modinv64 ( uint64_t a ) { uint64_t x = a ; for ( int i = 0 ; i < 5 ; i ++ ) x *= 2 - a * x ; return x ; }アプリケーションやプラットフォームによっては、このルーチンをさらに最適化することが理にかなっている場合があります。たとえば、ルックアップ テーブルを使用して、より大きな 2 のべき乗を法とする逆数を提供することで、最初の数回の反復をスキップできます。また、一部のシステムでは、32 ビット乗算が 64 ビット乗算よりも高速な場合があり、その場合は、逆数が法となるまで 32 ビット乗算のみを使用することで、ある程度の高速化が得られます。が取得された後、64 ビット乗算に切り替えます。このような最適化を適用すると、モジュラ乗法逆元を計算する C ルーチンは、になる:
#include <stdint.h> uint64_t modinv64 ( uint64_t a ) { static const uint8_t tbl [ 256 ] = { 0 , 1 , 0 , 171 , 0 , 205 , 0 , 183 , 0 , 57 , 0 , 163 , 0 , 197 , 0 , 239 , 0 , 241 , 0 , 27 , 0 , 61 , 0 , 167 , 0 , 41 , 0 , 19 , 0 , 53 , 0 , 223 , 0 , 225 , 0 , 139 , 0 , 173 , 0 , 151 , 0 , 25 , 0 , 131 , 0 , 165 , 0 , 207 , 0 , 209 , 0 , 251 , 0 , 29 , 0 , 135 , 0 , 9 , 0 , 243 , 0 , 21 , 0 , 191 , 0 , 193 , 0 , 107 , 0 , 141 , 0 , 119 , 0 , 249 , 0 , 99 , 0 , 133 , 0 , 175 , 0 , 177 , 0 , 219 , 0 , 253 , 0 , 103 , 0 , 233 , 0 、211、0 、245、0、159、0、161、0、75、0、109、0、87、0、217、0、67、0、101、0、143、0、145、0、187、0、221、0、71、0、201、0、179、0、213、0、127、0、129、0、43、0、77、0、55、0、185、0、35、0、69、0、111 , 0 , 113 , 0 , 155 , 0 , 189 , 0 , 39 , 0 , 169 , 0 , 147 , 0 , 181 , 0 , 95 , 0 , 97 , 0 , 11 , 0 , 45 , 0 , 23 , 0 , 153 , 0 , 3 , 0 , 37 , 0 , 79 , 0 , 81 , 0 , 123 , 0 , 157 , 0 , 7 , 0 , 137 , 0 , 115 , 0 , 149 , 0 , 63 , 0 , 65 , 0 , 235 、0 、13 , 0 , 247 , 0 , 121 , 0 , 227 , 0 , 5 , 0 , 47 , 0 , 49 , 0 , 91 , 0 , 125 , 0 , 231 , 0 , 105 , 0 , 83 , 0 , 117 , 0 , 31 , 0 , 33 , 0 , 203 , 0 , 237 , 0 , 215 , 0 , 89 , 0 , 195 , 0 , 229 , 0 , 15 , 0 , 17 , 0 , 59 , 0 , 93 , 0 , 199 , 0 , 73 , 0 , 51 , 0 , 85 , 0 , 255 }; uint32_t a32 = ( uint32_t ) a ; uint32_t x = tbl [ a & 0xFF ]; // 2^8 を法とする逆数x *= 2 - a32 * x ; // 32 ビット乗算x *= 2 - a32 * x ; // 32 ビット乗算return x * ( 2 - a * x ); // 64 ビット乗算}モジュラー乗法逆元を見つけることは、モジュラー算術の理論に基づくアルゴリズムにおいて多くの応用例があります。例えば、暗号学では、モジュラー算術を用いることで、一部の演算をより高速かつ少ない記憶容量で実行できる一方で、他の演算はより困難になります。[ 15 ]これらの特徴はどちらも有利に利用できます。特に、RSAアルゴリズムでは、メッセージの暗号化と復号は、慎重に選択された法に対する乗法逆元である2つの数値を使用して行われます。これらの数値のうち1つは公開され、高速な暗号化手順で使用できますが、もう1つは復号手順で使用され、隠蔽されます。公開された数値から隠蔽された数値を特定することは計算上不可能であると考えられており、これがシステムがプライバシーを確保する仕組みとなっています。[ 16 ]
別の文脈での別の例として、コンピュータサイエンスにおける厳密な除算問題を考えてみましょう。これは、 kで割り切れる奇数個の単語サイズの数値のリストがあり、それらすべてをkで割りたい場合の問題です。一つの解法は次のとおりです。
多くのマシン、特に除算のためのハードウェアサポートがないマシンでは、除算は乗算よりも処理速度が遅いため、この方法を用いることで大幅な高速化が期待できます。最初のステップは比較的時間がかかりますが、一度だけ実行すれば済みます。
モジュラー乗法逆元は、中国剰余定理によって保証される線形合同式の系の解を得るために使用されます。
例えば、システム
5、7、11は互いに素なので、共通の解が存在する。解は次のように与えられる。
どこ
したがって、
そしてその独特な縮小形
385は5、7、11の最小公倍数だからです。
また、モジュラー乗法逆元は、クルースターマン和の定義において重要な役割を果たしている。