分母が m と互いに素でない場合、「乗法逆剰余」を計算するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1521771

  •  19-09-2019
  •  | 
  •  

質問

計算する必要があります (a/b) mod m どこ a そして b 非常に大きな数です。

私がやろうとしているのは計算することです (a mod m) * (x mod m), 、 どこ x それは モジュラーインバースb.

使ってみた 拡張ユークリッドアルゴリズム, しかし、b と m が互いに素でない場合はどうすればよいでしょうか?具体的には 言及された b と m は互いに素である必要があるということです。

コードを使ってみた ここ, 、そして例えば次のようなことに気づきました。3 * x mod 12 のどのような値でもそれはまったく不可能です x, 、 それは存在しない!

どうすればいいですか? アルゴリズムを何らかの方法で変更できないでしょうか?

役に立ちましたか?

解決

はい、あなたは困っています。xには解がありません b*x = 1 mod m b と m に公約数がある場合。同様に、元の問題では a/b = y mod m, 、あなたはそのようなyを探しています a=by mod m. 。a が次で割り切れる場合 gcd(b,m), 、その後、その係数で除算して y を解くことができます。そうでない場合、方程式を解くことができる y は存在しません (つまり、 a/b mod m 定義されていません)。

他のヒント

b と m が互いに素でなければならない理由は、中国の剰余定理のためです。基本的に問題は次のとおりです。

3 * x mod 12

次のような複合的な問題として考えることができます。

3*x mod 3 そして 3*x mod 4 = 2^2

ここで、b が 12 と互いに素でない場合、これはゼロで除算しようとしているようなものです。したがって、答えは存在しません!

これは抽象代数における場の理論によるものです。フィールドは基本的に、加算、減算、乗算、除算が明確に定義されたセットです。有限体は常に GF(p^n) の形式になります。ここで、p は素数、n は正の整数であり、演算は p^n を法とする加算と乗算です。さて、12 は素数累乗ではないので、 指輪 フィールドではありません。したがって、この問題は、m と互いに素でない b については解くことができません。

これをチェックして: http://www.math.harvard.edu/~sarah/magic/topics/division役立つかもしれません。モジュール分割の方法を説明します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top