逆元

Latest Author anta /Date 2015-06-06 01:45:14 / Views 4417
0 (Favした一覧ページはユーザーページから)

RRの要素aRa \in Rに対し、ab=1a b = 1となるような要素bbaaの逆元(inverse)と呼ぶ。 逆元は存在するなら一意である。そこで、逆元の存在する要素に対してはa1a^{-1}として逆元を表すことにする。 逆元が存在する要素を"unit"と呼ぶ。unitのみを集めたものに対して掛け算を演算とするとそれは群になり、これををRR^*として表す。

剰余環の場合

剰余環R=Z/mZR = \mathbb{Z}/m\mathbb{Z}の要素aRa \in Rがunitであるのは、gcd(a,m)=1\gcd(a, m) = 1であることと同値である。 そのような要素に対しては、拡張ユークリッドの互除法を用いて逆元を求めることができる。

mod pq{\rm mod}\ p^q上の場合

ニュートン法(Hansel listing)を用いれば拡張ユークリッドの互除法を使うより高速に逆元を求められる。 特に、mod 2k{\rm mod}\ 2^k上の場合は重要である。

多項式の剰余環の場合

多項式の場合でも整数の場合と同じように拡張ユークリッドの互除法で逆元を求められる。

formal power series上の場合

多項式を使うテクニックたち参照。

多数の逆元を一度に求める

長さNNの配列AAに対して、それぞれの要素に対する逆元を全て求めたい。 このとき、1つずつ逆元を求めなくても、逆元を1回だけ計算すれば全ての逆元を求められる。 まず、p[k]=i=0k1A[i]p[k] = \displaystyle \prod_{i=0}^{k-1} A[i]とprefix productを求める。 次に、p[N]1p[N]^{-1}を(普通に)求める。すると、i<Ni < Nに対してp[i]1=p[i+1]1A[i]p[i]^{-1} = p[i+1]^{-1} A[i]として、prefix productの逆元を全て求められる。 最後に、A[i]1=p[i+1]1p[i]A[i]^{-1} = p[i+1]^{-1} p[i]とすればAAの全ての逆元を求めることができた。