3

ガウス整数の商と余り(普通とは異なる定義)

1179
0

この記事の目的

整数の除法で商と余りを求める方法には大きく分けて2通りある。
絶対値最小剰余 の除法と、 そうでない除法 である。

これはZ[i]の要素である ガウス整数の場合 に拡張することができる。
(この記事ではiを虚数単位(i2=1)とする)

ガウス整数の除法の原理

任意のa,b Z[i]に対して、
a=bq+r     (N(r)<N(b))
となる商qZ[i]と余りrZ[i]が存在する。

ここでa=a1+ia2のときN(a)=a12+a22とした。

よく知られているのはqとして、abQ[i]に最も近いqZ[i]を選ぶ( ガウス整数の余りつき割り算 )というものである。
これは絶対値最小剰余を拡張した除法といえる。
ただ、この除法はa,bの選び方によっては商qの決め方が何通りか考えられる。

「これをうまく解消できる除法を定義してみたい」、「絶対値最小剰余ではない除法を拡張できないだろうか?」というのがこの記事の目的である。
ただ先に結果を述べておくと、目的の達成はできてはいるがユークリッド互除法を行うためには工夫が必要になっている。

余りを構成する

a,bZ[i]に対してa/bの余りrが、次の図1のようにbibのつくる正方形の領域内に含まれるように定義する。

除数と余りの関係 除数と余りの関係

これはつまり、

0b|b|r<|b|
0b|b|×r<|b|

が成り立つように、余りrを定義するということになる。

この記事では複素数a=a1+ia2に対応するベクトルa=(a1,a2)を考え、
ab=a1b1+a2b2
a×b=a1b2a2b1
とする。

命題2が成り立つことは、単位ベクトルとの内積は正射影であるし、単位ベクトルとの二次元の外積は垂直方向への射影であることから分かる。

ここではこれを別の方法で示してみよう。

命題2

まずはb1>0の場合を考える。
bibのつくる正方形の領域内の座標を(x,y)とすると、図1よりx,y
b2b1yx<b2b1(yb2)+b1
b2b1xy<b2b1(x+b2)+b1
をみたさなければならない。
これは整理すると、
0b1x+b2y<b12+b22
0b1yb2x<b12+b22
つまりx=(x,y)とすると
0bx<|b|2
0b×x<|b|2
ということである。
x=rの場合でも、rが上記の正方領域内に含まれるためにはこの関係式が成り立たなければならない。
次にb1<0b1=0の場合だが、これも同様にできる。

ここまでで、bibがつくる正方領域内にrが含まれる条件が分かった。
では、これをみたす商qと余りrはどのように計算したらよいのだろうか?

商と余りの計算方法

br=(b1ib2)(r1+ir2)=(b1r1+b2r2)+i(b1r2b2r1)=br+ib×r
であるため、|b|=|b|に注意すると
b|b|2r=b|b|2r+ib|b|2×r
であり、これはさらに
b1r=Re(b1r)+iIm(b1r)
と表すことができる。

この結果と命題2から

0Re(rb1)<1
0Im(rb1)<1

が成り立つ。

ではa,bZ[i]においてa/bの商qと余りrを計算方法はどうなるのだろうか。
a=bq+r
ab1=q+rb1
この実部と虚部はそれぞれ
Re(ab1)=Re(q)+Re(rb1)
Im(ab1)=Im(q)+Im(rb1)
である。
つまりab1の実部と虚部を切り下げるだけで、商qが得られる。
rr=abqにより計算できる。

これらをまとめる前に記号を定義する。
記号 床関数 を表すことにする。
ここでは床関数を拡張して

複素数の床関数

x=x1+ix2(x1,x2R)に対して
x=x1+ix2

とする。

以上から次のことが結論付けられた。

ガウス整数:商と余りの計算方法

任意のa,bZ[i]に対して、商qZ[i]と余りrZ[i]
q=ab,r=abq
で定める。このとき
0br<|b|2
0b×r<|b|2
が成り立つ。

このように ドナルド・クヌースの「切り下げ除算」 はガウス整数にそのまま拡張できる。
この除法は、「除数bが作る正方領域内に余りrが含まれる」という幾何学的側面とも関係し、大変興味深い。

ユークリッド互除法の適用法

ではユークリッド互除法は成り立つのだろうか。
残念ながら普通には計算できない。
しかし、工夫することで互除法を使うことができる。

まずは、なぜそのままでは使うことができないのかを考えよう。

命題3より
0Re(rb1)2+Im(rb1)2<2
0|r|2|b|2<2
0|r|<2|b|
は常に成り立つが、|r|<|b|a,bの選び方によっては成り立たないこともある。
(例えばa=5+4i,b=3+iのときq=1,r=2+3iのため|b|<|r|)
そのため互除法をそのまま使うことはできない。
(a=5316i,b=59+6iの場合は、互除法をそのまま使うと計算が無限に続いてしまう)

ここで少し思い起こしてみると、自然数a,bの最大公約数gcd(a,b)を求めるユークリッド互除法では
gcd(a,b)=gcd(b,r)
という性質を利用して計算した。
ただし0r<bであり、これが互除法の計算が終わる上で大切だった。

そのため、これをガウス整数に適用する場合は
gcd(a,b)={gcd(b,r)           (|r|<|b|)gcd(b,rb)     (|b||r|,|rb||rib|)gcd(b,rib)    (|b||r|,|rib|<|rb|)
のように工夫が必要になる。

どうしてこの工夫で互除法の計算が上手く進むのだろう。

ユークリッド互除法の調整 ユークリッド互除法の調整

rが図2の紫色の領域にあり、しかも例えば|b|<|r|の位置にある場合、bb+ibの距離は|b|であるため|rb|<|(b+ib)b|=|b|となる(紫色の領域内でbから一番遠いのは原点かb+ibだから)。そのためgcd(b,rb)とすれば互除法を続けることができるからである。
(水色の領域にrがある場合も同様)

まとめ

商と余りを一意に定められる除法を構成でき、計算方法もシンプルであるのは興味深い。
一方でユークリッド互除法を適用するために工夫が必要となるのは惜しい結果だった。

投稿日:2021817
更新日:202448
OptHub AI Competition

この記事を高評価した人

高評価したユーザはいません

この記事に送られたバッジ

バッジはありません。
バッチを贈って投稿者を応援しよう

バッチを贈ると投稿者に現金やAmazonのギフトカードが還元されます。

投稿者

コメント

他の人のコメント

コメントはありません。
読み込み中...
読み込み中
  1. この記事の目的
  2. 余りを構成する
  3. 商と余りの計算方法
  4. ユークリッド互除法の適用法
  5. まとめ