tsujimotterのノートブック

日曜数学者 tsujimotter の「趣味で数学」実践ノート

13, 613, 20200613は合同数

こんにちは! 今日の日付は 2020/06/13 ですが、20200613 は素数 ですね!

さらにいうと、20200613は「4で割って1あまる素数」でもあるわけですね。いやーじつにめでたい!

上記の事実は、大人のための数学教室を経営している「和から株式会社さん」のTwitterアカウントで知りました。


せっかくなので、今日の日付に関して、自分でも何か発見をしたいなと思って考えてみると……

  • 13
  • 613
  • 20200613

のいずれも、合同数 であることがわかりました!


個人的には、この事実はとても面白いと思っています!

とはいえ、この話の面白さは合同数というものを知らない方には、なかなか伝わらないかと思います。

そこで今日は、その辺の背景も含めて解説していきたいと思います。よかったら最後までお付き合いください!



合同数とは

まずは、合同数について説明しましょう。合同数とは

「3辺の長さがすべて【有理数】である直角三角形の面積になる整数」

のことです。図に表すとこんな感じです。

f:id:tsujimotter:20200613175550p:plain:w300

では、このような数はどうやって探したらいいでしょうか。

一番簡単なのは「ピタゴラス数」を探すことです。ピタゴラス数とは

 X^2 + Y^2 = Z^2

を満たす【整数】の組  (X, Y, Z) のことです。

有名な例としては

 3^2 + 4^2 = 5^2

がありますね。これによって、辺の長さが  3, 4, 5 であるような直角三角形

f:id:tsujimotter:20200613180258p:plain:w140
が得られて、この面積が  \frac{3 \times 4}{2} = 6 であることがわかります。つまり、 6 は合同数 だということです!

ほかにも、

 5^2 + 12^2 = 13^2
 8^2 + 15^2 = 17^2

などのピタゴラス数から、 30, \; 60 がそれぞれ合同数であることがわかります。

ピタゴラス数のすべての組合せは、理論的に列挙することができます。そんなわけで、3辺がすべて【整数】であるような合同数は比較的簡単に見つけることができます。

一方、3辺がすべて【有理数】であるような直角三角形をみつけることは、容易ではありません。このことが、合同数を探す上で非常にネックになる問題です。


たとえば、7 という数は合同数でしょうか?
素朴に考えると、面積が7になる直角三角形を見つければよいということになりますが、実際こんな直角三角形が見つかります:

f:id:tsujimotter:20200613181338p:plain:w240

それでは、157 の場合はどうでしょうか?

f:id:tsujimotter:20200613181400p:plain:w450

そう、とんでもなく大きな値になっていますね。

こんな風に、たとえ  n の値が小さかったとしても、その  n を面積にもつ3辺の有理数の分母・分子が、とてつもなく大きくなる場合もあるのです。こんな状況で合同数を探すのは苦労しそうです。

7と157の例は、過去のこちらの記事でも紹介したことがありました:
tsujimotter.hatenablog.com

合同数を判定する条件

これまでの説明で、 n が合同数であることを判定しようと思ったときに、面積が  n になるような直角三角形を探すのは、とても困難な問題であることが分かったかと思います。

ところがです。賢い人はいるもので、一般の整数ではなく、ある特定の条件を満たす素数については、合同数であることを判定する方法 が知られているそうです。Wikipediaの「合同数」の記事の「近年の進展」の箇所を引用しましょう。

部分的な解決として、以下の事実が証明されている。ここに、p は奇素数とする。
p を 8 で割ったあまりが 3 のとき、p は合同数ではなく、2p は合同数である。
p を 8 で割ったあまりが 5 のとき、p は合同数である。
p を 8 で割ったあまりが 7 のとき、p と 2p は合同数である。

これはすごそうですね!

8で割ったあまりで合同数が簡単に判定できる というのです。もちろん、必要十分条件ではないので、条件に合致すれば判定できるという話ですが、それでもすごいことです。


英語版のWikipediaの方には、参考文献も載っていました。

Paul Monsky (1990), "Mock Heegner Points and Congruent Numbers", Mathematische Zeitschrift, 204 (1): 45–67, doi:10.1007/BF02570859

どうやら、"Mock Heegner Points" という道具を使うようなのですが、かなり難しそうです。


ともあれ、今回判定したい素数

  • 13
  • 613
  • 20200613

は、すべて8で割ったあまりが5 です。

引用した事実を信じるならば、2番目の条件により すべて合同数 であることがわかります!!

やったぜい!!!

いやー、テンションが上がりますね!!!



直角三角形の計算

 n = 13, 613, 20200613 のどれもが合同数であることがわかったので、それぞれ対応する直角三角形を求めてみようと思います。

ここでは 「楕円曲線」という道具を使います。ここら辺からだいぶ難しくなるのですが、計算の手順としては以下の通りです:

  •  n が合同数であるならば、対応する楕円曲線  E_n: Y^2 = X^3 - n^2 X が無限位数の有理点を持つ
  •  E_n の無限位数の有理点の生成点  P を求めて、それを二倍した点  Q = 2P = (X, Y) を計算する
  • この  X, Y を適当に変数変換すると、面積が  n であるような直角三角形の3辺が求まる

詳しくは、以前書いた以下の記事に書いてあるので、興味ある方は読んでください:
tsujimotter.hatenablog.com


なお、上記の計算は、手計算ではとても大変です。特に、 E_n の生成点を計算するパートが難しいので、Sagemathというツールを使用したいと思います。以下のページからオンラインでも計算することができます。

SageMath - Open-Source Mathematical Software System

「CoCalc Instant SageWorksheet」というボタンを押して、飛んだ先で適当にアカウントを作って設定していただけると使えるようになります。


というわけで、実際に以下のようなコード( n = 13 のときの計算例)を打って、実行してみましょう。

n = 13

# n に対応する楕円曲線 E_n : y^2 = x^3 - n^2 x
E = EllipticCurve([0,0,0,-n^2,0]); E

# E をプロット
plot(E)

# E_n の無限位数の点の生成元(生成元が存在すれば、n は合同数)
E.gens()

# 生成元を P とする
P = E.gens()[0]; P

# P の2倍点 (x : y : 1) を求める(y > 0 であれば合同数の三角形に対応する)
Q = 2*P; Q


# 点 Q の x, y 座標を取り出す
x = Q[0]
y = Q[1]

# 直角三角形の辺の長さ (a, b, c)
print ""
print "直角三角形の辺の長さ (a, b, c)"
a = sqrt(x+n) - sqrt(x-n); a
b = sqrt(x+n) + sqrt(x-n); b
c = 2*sqrt(x); c


このような結果が得られるかと思います。
f:id:tsujimotter:20200613184240p:plain


一番下に書いてある3つの数が、面積が13になる直角三角形の3辺の長さです。

780/323
323/30
106921/9690


図示するとこんな感じになります!

f:id:tsujimotter:20200613184422p:plain:w300

ちゃんと直角三角形が得られましたね! 


実際、検算してみると、面積は13になることがわかりますし、3辺の長さはピタゴラスの定理の関係式を満たすこともわかります。

たしかに 13は合同数 だったというわけです! 面白いですね!!



この調子で、 n = 613, \; 20200613 も計算してみましょう!


……と言いたいところですが、残念ながらこの辺が限界のようです。

実際、上記のプログラムで  n = 613, \; 20200613 として実行してみると、次のようなエラーが出てきます。

f:id:tsujimotter:20200613184749p:plain:w600

エラーの原因は、楕円曲線  E_n の生成点を計算する箇所にあります。

生成点を計算するのに「2-descent」という、これまた難しい手法が使われています。この手法は、 E_n のテイト・シャファレビッチ群  Ш(E_n/\mathbb{Q})[2] が自明でないときには、うまく機能しないのだそうです。実際、エラーメッセージには

This could be because Sha(E/Q)[2] is nontrivial.

とありますので、うまく機能しないケースに当てはまってしまったのですね。

詳しい理論的な背景は、こちらの記事で説明しています:
tsujimotter.hatenablog.com


そんなわけで、楕円曲線  E_{613}, E_{20200613} の生成点がどちらも求められなかったので、 n = 613, \; 20200613 に対応する直角三角形は計算することができませんでした。

残念ではありますが、それぐらい合同数の計算って難しいのですね。

おわりに

というわけで、今日の日付である 20200613 からスタートして、合同数の性質について紹介しました。

今回の記事の面白ポイントは、3つの数 13, 613, 20200613 は、どれも8で割って5あまる素数なので、すべて合同数である という点です。

記事の後半では、合同数の定義に立ち返って、それぞれの数に対応する直角三角形の各辺を求めることにも挑戦してみました。13については直角三角形の各辺を見つけることができましたね。

 613, 20200613 については、今回の手法では求めることができませんでした。逆にいうと、合同数の計算がとても難しいということですね。傾向をみるに、 613, 20200613 に対応する直角三角形の各辺は、とても巨大な数の分数になるのかなと思います。

にも関わらず「20200613が合同数」であることがわかってしまうのは、個人的にとてもすごいことだと思います。数学って面白い。いつか、記事の途中で紹介した事実も理解できるといいなと思います。


というわけで、今日はこの辺で終わりにします。読んでくださったみなさま、ありがとうございました!

気に入っていただけたら、この記事をシェアしていただけると嬉しいです!
それでは!


追記:2020も合同数

Oddieさんという方が、2020が合同数であることも計算してくれました!

直角三角形の3辺も求まったみたいですね! これで

  • 6
  • 13
  • 613
  • 2020
  • 20200613

のすべてが合同数であることが分かりました! すごい!!!