10

最大公約数の和表示

198
0

和表示の意味って…

ここでは最大公約数を数列の総和にて表示する。ただしこの表示によって、計算量の減少や、なにかふかーい事実が得られるというわけではない。ただ、この和表示によってなにかしらの一つの新しい解釈が得られることは保証されよう(もしも既に知っていることだったら・・・う~ん残念!)。

道具

 ここでは級数表示のために使うあるアイディアを紹介する。おそらく多くの人が最大公約数と結びつけたことのない話題であろう。

直線と格子

格子点同士を結ぶ直線を考える(面倒くさいからExcelで撮影)。
Line Line
このときに、直線がいくつの正方形を通っているか、一度は考えたことがあるだろう。
LineBlock LineBlock
これを具体的な式で表すことが今回の肝である。

通る正方形の個数

直線が通る正方形の数を考えるときに、直線がいくつの格子点を通るかが重要となる。(x1,y1)(x2,y2)を結ぶ直線の通る(始点終点を除く)格子点の個数nは、明らかに次の式で与えられる。
n=gcd(|x1x2|,|y1y2|)1
ただし直線は垂直や水平でないものとする。
 ここで直線と、格子の線の交点に注目する
LinePoints LinePoints
小さい丸は格子の線と一回交わっている場所、大きな丸は格子点で交わっている場所を表している。
 左上から右下まで直線をゆっくりたどっていこう。

  1. 左上の点から直線に沿って一つ目の正方形を進んでいくと、小さな赤い丸にたどり着く。そこで格子の線と交わっている。
  2. 格子の線を越えてみよう。すると二つ目の正方形に入る。そのまま二つ目の正方形を進む。
  3. 進んでいくとまた小さな赤い丸にたどり着く。そこでまた格子の線と交わっている。
  4. また格子の線を越えてみよう。すると三つ目の正方形に入る。そのまま三つ目の正方形を進む。
  5. これを繰り返していくと、大きな赤い丸にたどり着く。格子点だ。そこを超えると、また新しい正方形に入る。そこで進んでいくと、また小さい赤い丸にたどり着くはずだ。
  6. 以下繰り返し・・・。

このように見てみると、あることが分かってくる。赤い丸である交点は、直線が通る隣り合う正方形と正方形の間に位置しているのだ。したがって、植木算より
「交点の個数=正方形の数 1
と分かる。じゃあ交点の個数は?これは直線の始点と終点の間にある、縦線と横線の個数に関係がある。小さい赤い丸の点では線と一回交わっている。一方で大きな赤い丸の点は格子点なので、縦線と横線両方に交わっている。だから
「交点の個数=縦線の数+横線の数通る格子点の数」
となる。ここでa=|x1x2|,b=|y1y2|とすると、交点の個数は
(a1)+(b1)(gcd(a,b)1)=a+bgcd(a,b)1.
となる。すると正方形の数は
(a+bgcd(a,b)1)+1=a+bgcd(a,b)
と表される。
図の例ではa=21,b=15より、
21+15gcd(21,15)=21+153=33
より、33つ通っているとわかる。
 ちなみにこの式をgcd(a,b)で割るともう一つの導出方法も見えてくるが…これは各自に任せる。

和による正方形の個数表示

正方形の個数は求まった。でも考えてみてほしい。直線の通る正方形(図の黄色い部分)の個数を、一列ごとに足していけばいいのではないだろうか。
LineBlockSum LineBlockSum
ここでやっと直線の式の出番だ。(0,0)(a,b)を通る直線の方程式はy=baxであった。そして「一列ごとに足していく」には少々の工夫が必要である。次の図を見てもらいたい。
LineBlockUnder LineBlockUnder
茶色のブロックは、a×bの長方形内において、直線の下側にあるブロックである。この茶色ブロックの個数は、次の式で与えられる。
k=1a1bka
そして直線の上側のブロック数も、下側のブロック数と同じである。よって、直線の通るブロック数は、
ab2k=1a1bka
である。ただし、a=1のときには総和部分を0とみなす。
 もしくは、黄色のブロックを直接求めることも可能だ。すなわち
k=0a1(b(k+1)abka)

2つの数の最大公約数の和表示の導出

 道具の解説も終わったので、ついに和表示の導出である。とはいっても、直線の通る正方形の個数の表示式
a+bgcd(a,b)ab2k=1a1bkak=0a1(b(k+1)abka)
を使うとばすぐ導出できる:
gcd(a,b)=a+b+2k=1a1bkaab=a+bk=0a1(b(k+1)abka) ()
()を証明してみよう(これは正方形の個数の導出が帰納的で直感的、すなわち厳密性を欠いたものであったためだ)。まずは一行目の式を変形する:
a+b+2k=1a1bkaab=a+b+k=1a1(bka+b(ak)a)ab=a+b+k=1a1(bka+bka+b)ab=a+b+k=1a1(bkabka)+(a1)bab=ak=1a1(bkabka)
これは()の二行目の式
a+bk=0a1(b(k+1)abka)=a+b(k=1a1(bkabka)+b)=ak=1a1(bkabka)
と一致している。また、この式に
bkabka={1(bk0(moda))0(otherwise)
を適用することで
ak=1a1(bkabka)=a{(a1)(gcd(a,b)1)}=gcd(a,b)
と証明ができる。

3つの最大公約数の和表示について

 先ほどの和表示は次の関係式を用いることで、一応拡張することができる
gcd(a,b,c)=gcd(gcd(a,b),c)
でもこれだと式がめっちゃ汚くなる。そこで先ほどのアイディアが使えないかと考えてみる。
 2つの数では2次元の格子を使用したのだから、3つの数では3次元の格子を用いてみる。通る立方体の数は、交点個数+1より、次のように求められる。
(a+b+cgcd(a,b)gcd(b,c)gcd(c,a)+gcd(a,b,c))+1
しかし問題は、どうしても立方体の個数を和表示できないのだ。おそらくはこの方針では解決不能であり、新しいアイディアが必要である。もしくは、和表示は2つの最大公約数に限った表示という考え方もできるかもしれない。

投稿日:20201023
OptHub AI Competition

この記事を高評価した人

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

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

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

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

投稿者

epidemic
epidemic
42
3010
ネタ切れ中; TeXの空白やピリオドの様式がよく分からん; 日本語記事の少ない話題を主に書く;

コメント

他の人のコメント

コメントはありません。
読み込み中...
読み込み中
  1. 和表示の意味って…
  2. 道具
  3. 直線と格子
  4. 通る正方形の個数
  5. 和による正方形の個数表示
  6. 2つの数の最大公約数の和表示の導出
  7. 3つの最大公約数の和表示について