斜辺を共有するピタゴラス数たち(解決編)
これの続きです。↓↓↓
今回はこれの解決編として、非原始解も含めた二平方和分解の正確な個数とその具体的な値を与えます。これにより、斜辺を共有するピタゴラス数たちについての完全な情報の記述を目指します。
1. 前回の復習
斜辺を共有するピタゴラス数の二平方和分解の方法について、前回の記事で以下のような結果を得ました。
斜辺の長さ
について、
の場合:
1つのに対して原始ピタゴラス数は少なくとも
個存在する
非原始解を含めるともっとたくさん存在すると予想される
の場合:
ピタゴラス数にならない
が非負偶数のとき:
原始解を持たないが、非原始解を少なくとも個持つ
の素因数を
で割ったあまりで分類することで、分解できる条件と原始解の個数の下限が得られました、というのが前回までのあらすじです。
逆にわかっていないのは、非原始解の個数とその具体的な値、分解と再構成の方法がガウス整数の範囲での因数分解とブラーマグプタの二平方恒等式によるもの以外に存在するのかしないのか、でした。これが原因で少なくともという控えめな主張に留まっています。
ということで、前回手をつけなかった非原始解について調べます。
2. 非原始解の構成
これまで非原始解についてはあまり触れてきませんでした。先に原始解について考察した方が見通しが良くなるだろうという直感があったからです。
前回の記事では、一度分解した素因数が再生しないように分割することで原始解を構成しました。そうしなければ分解した素因数が再生して非原始解になってしまうからでした。よって、今回は一部だけ分解しないまま残すことで非原始解を構成します。
で割って
余る素数
はいくつあっても分解の個数に影響しないので、
で割って
余る素数
のみを素因数に持つ場合を考えます。つまり上の式において
として考えます。
分解しない素因数として、例えば個ある
のうち一つだけを分解しないことを考えると、まず思いつく非原始解は
の原始解に
をかけた形のものです。
の原始解は
個存在し、それぞれに
をかけることで同数の非原始解が生成されるので、このようなタイプの非原始解の個数は
です。
また、前回の記事で示したように、原始解の個数は素因数の指数に依存しません。素因数の種類の個数のみが大事でした。なので一般にとなります。
これは非原始解の個数を考える上で大事な点です。
分解の対象に含まれる素因数の種類の個数が変わらないうちは、その素因数の指数がなんであれ原始解の個数が一定なので、分解の対象に含まれる素因数
ここで、
こうして得られた原始解に、分解しないまま保存しておいた素因数を全てかけることで、分解の対象に含まれる素因数の種類の個数が
3. 非原始解の網羅
次に、あるに対して可能な全ての
について考えます。
よって、
となります。
更に、
さて、前回の記事で
と書けます。
この中で
となります。最後に
これで、原理的に特定できないのみで書かれた式になりました。
4. ヤコビの二平方定理
限界まで情報を抽出することで、原始解の評価から更に進んで の分解についての一定の評価ができました。
ここからどうしようか、という話になりますが、実はこの問題はほとんど解決されています。それを教えてくれるのがヤコビの二平方定理です。
は「
は
の約数ではない」、
は「
は
の約数である」、という意味です。
この式を日本語に翻訳すると、「 の約数のうち、
を法にして
と合同になるものの個数から
と合同になるものの個数を引いたものの
倍に等しい」くらいのことになります。
……これこそまさに求めていた分解の個数そのものですね。
正確には、ヤコビの二平方定理の言う「平方数の和」とは、を含み、更に
のように左右や負号を入れ替えたものも区別します。この記事では前者を考えないため
通りを除外し、後者については全て同一視するので個数が
になるので、分解の個数は
とカウントします。
従って、上の式を使えば
これはの下限そのものです。一方でヤコビの二平方定理は言わば分解個数の上限を与えるものなので、上限と下限が一致しました。
以上から、 の二平方和分解の正確な個数とその具体的な値が、前回の記事で行ったブラーマグプタの二平方恒等式による方法で完全に記述しきれていることがわかりました。
5. 結論
ピタゴラスの定理について「一つの斜辺の長さがどんな場合にいくつの解を持つのか」という疑問から始まって、最終的にヤコビの二平方定理の詳細について、完全な記述とその具体的な値の構成法が得られました。
ここで、得られた結果をまとめておきます。
前回の課題を解決できてよかったです。
終わり
参考
抽象化〇×クイズの最小手数
このとき、どんな場合にも満点をとるには何回繰り返せば良いか?
今回は論理パズルのお話です。
※上の目次のうち、重要な(そして面白い)のは 4. 論理的に考えてみる 以降です。数学的な話以外に興味がなければそこから読んでください。
1. 抽象化○×クイズ
問題の意味を確認します。
○×クイズとは、正解が○か×である問題に対し、○か×かで回答する二択形式のクイズのことです。
例:
Q . 太陽は地球の周りを回っている。○か×か?
A . ×
このように、正解が×であるときは、×と答えると正しい回答になります。正しい回答をしたら○とか、間違った回答をしたら×、とかいうことではないので注意しましょう。
さて、今回は問の○×クイズがあり、何度か挑戦してそれら全てに正解することを目指し、最悪の場合での最小手数を考えます。ただし正解/不正解のフィードバックは、個々の問題についてはされず、総合得点のみ分かるという状況です。例えば正解が"○×○"である場合に"×××"と回答すれば
問正解となります。
また、満点と書かれていましたが、問正解すると何点得られるのかは不明です。とりあえず
点として一般性は失われませんが、この点については後で議論します。
それでは早速やっていきましょう。
2. 愚直な方法
当たり前ですが、個々の問題の正解を知ることができれば全問正解です。なので個々の問題について一つ一つ正解を確認していけば良いです。
前述のとおり、○×クイズは二択です。よって特定の問以外の回答を統一して、その
問について○と×の場合の得点を比較することで正解がわかるはずです。
1問目について○と×の場合を比較し、1問目の回答を判明した正解に固定して2問目について○と×の場合を比較し、2問目の回答を判明した正解に固定して3問目について○と×の場合を比較し……というのをn問目まで繰り返せばすべての正解がわかり、満点が得られます。
この方法では回の試行が必要……そうですが、実は正解を知るだけなら
回でも十分です。n問目の正解については一度確認すれば
点か
点かがわかるので、
回確認する必要がないのです。
回目の試行で全ての正解がわかり、その時点で全問正解を達成するか、
回目の試行で全問正解するかのどちらかです。
ということで、この方法での最小手数は最悪の場合で です。
3. もう少し賢い方法
得点しか情報がないので、基本的には各試行の得点の差を使って考えていくしかありません。上の方法も得点差を利用したものですが、もっと効率的な方法があります。一つの共通の基準と個々の問題を比較するのです。
回目は(キャリブレーションとして)全て○で回答を出し、その得点を確認します。
回目は1問目だけを×にして回答し、その得点を確認します。
問だけ回答を変えているので得点は
増えるか
減るかのどちらかです。増えれば×が正解だったことになり、減れば○が正解だったということです。どちらであれ1問目の正解がわかります。
以降も同様に得点の増減を確認することで、各問題の正解を決定できます。
この方法は最初のキャリブレーションの回と後の正解決定の
回の合計
回が必要……そうですが、全ての正解を決定するだけであれば、やはり
回で十分です。
回目の試行が終わった時点での状況をよく見てみると、1問目~n-1問目までの正解が判明していて、
回目の試行は1問目~n-2問目までが正しい解答を選んでいて、n-1問目が正解か不正解のどちらか(どちらかは判明している)で、n問目はどちらかわからない状態です。このとき、
回目の試行の得点によって場合分けすることができます。
1. 点の場合:運良く全問正解だった場合です。この時点で全問正解が達成されました。
2. 点の場合:更に場合分けします。
2-1. 問目が正解の場合:n問目が不正解であるとわかるので、
回目の試行で全問正解が可能です。
2-2. 問目が不正解の場合:n問目が正解であるとわかるので、
回目の試行で全問正解が可能です。
3. 点の場合:n-2問目までは全て正しい解答を選んでいるので、残り2問はどちらも不正解であったということです。それらの回答を変えることで、
回目の試行で全問正解が可能です。
以上から、どの場合でも回目の試行までには全問正解できることがわかります。
※一応書いておくと、○と×は入れ替えても問題ありません。シンボル自体に意味はないからです。
4. 論理的に考えてみる
上2つの方法はどちらも直観によって得られたものです。特に2つ目の方法は非常に効率が良さそうですが、今回知りたいのは"最小"手数です。直感的な方法ではなかなか最小性を保証できません。
そこでほしくなるのが数学による保証です。公理に従っていれば数学は公理の範囲で常に正しさを保証してくれるいいヤツなので、どうにか今回の問題を数学の言葉で表現したいところです。
そこで、2つ目の方法を数学の言葉に置き換えてみましょう。
回目の試行での回答セットを行ベクトル
、
個の正解を順番に並べた列ベクトルを
、各試行での得点を
とします。
ところで、回答セットと正解はすべて○か×ですが、普通これらは計算できないので、このままでは扱いにくいです。そこで、○と×を対応する計算可能なものと置き換えます。具体的には○をに、×を
に対応付けます。
こうすると、○×クイズの挙動と計算が以下のようにXOR(排他的論理和)っぽく上手く対応します。
回答が○、正解が○の場合:×
(正解)
回答が○、正解が×の場合:×
(不正解)
回答が×、正解が○の場合:×
(不正解)
回答が×、正解が×の場合:×
(正解)
つまり、○と×にと
を、正解/不正解と積を対応付けることができるのです。
具体的に見てみましょう。
正解が"○×○"である場合に回目の試行として"×××"と回答する状況では、
、
なので、
となります(右上のTは転置記号です)。
上で見たようにこの場合の得点は点ですが、
です。このズレは不正解のときの点数の違いが原因で、内積を利用した対応付けにより最小値は
となります。
これを回の試行に関して考えると、
を積み重ねた回答行列
と得点ベクトル
により、
と表せます。
知りたいのは正解、つまりです。
が正則であれば
として
回の試行と得点から計算できるので、
回の試行を一次独立になるように気をつけて行えば良いです。
ここで本題である最小性について考えます。と
の内積を計算するためには
は
行である必要があり、正解の完全な情報を含む
を得るには正則な回答行列
を得る必要があります。よって
を得るには
次正則行列
が必要になるのです。これは最低でも
回は試行が必要であることと同値なので、
回の試行の最小性が保証されます。
これで正解がわかることを2つ目の方法で確認してみましょう。
、
回目の回答を"○○○"、
回目の回答を"×○○"、
回目の回答を"○×○"とすると、
となり、は正則になっています。よってこの
回の試行で
が計算でき、
全ての正解が"○×○"であることがわかります(今回は更に運良く回目で全問正解もできていますが、常にこうなる訳ではありません)。
以上のことから、問の○×クイズで全問正解するために必要な最小回数は最悪で
です。
5. 得点の変換
ここまで○×クイズの得点を点と
点、○と×を
点と
点に対応させてきました。この変換の正当性を確認しておきます。
変換前の得点の組を、
問正解したときの変換前の合計得点を
、変換後の得点の組を
、
問正解したときの変換後の合計得点を
とする。このとき
となる。
から
への変換は変換関数
:
を定義することで可能になる。
は任意なので、
とすることで、上の議論で行った変換が可能であることが保証される。
6. 感想
自然言語で書かれた論理パズルを数学の言葉で書き直すことで厳密で見通しの良い議論ができました。
数学の効力は数学の提供する公理系が実際の問題と同一視できる場合に発揮されますが、その場合には非自明な結論を行うのに非常に強力です。このことを簡潔に評した言葉を引用して今回は終わりにしたいと思います。
"数学は着想や概念をフォーマリズム(形式化された理論的手続き)に翻訳し, そのフォーマリズムを適用して, あまり形式的でない分析が通常なら施せないような洞察を導き出す."
ぺるコン第3問をPythonに解かせてみた+おまけ
2018年秋にツイッターでぺるせんたげ数学コンテスト(ぺるコン)と題した数学の問題3問セットを公開しました。結構拡散してもらって、何人かが解答をくれたりツイートしてくれて、出題者としてとても楽しませてもらいました。
ありがとうございます。m( )m
さて、今回の本題。ぺるコン3問目です。
まずマシンパワーによる力業で解き、その後でちゃんとした解答例も公開します。
問題は以下のようなもの。
数学コンテストを開催します!
— ぺるせんたげ(シン・懲役) (@percentage011) 2018年10月27日
以下の問題を考えてみてください
制限時間とかは特にないです
最初に全て解けた人をめっちゃ褒めます
問題制作者:ぺるせんたげ @percentage011
協力してくれた人:SOx @SOx_S_R_M pic.twitter.com/sejhERZTdR
先に言っておくと、3問目は問題が間違っています。条件を満たす組があります。それを探してもらうという問題に変更しました。この記事でもそうします。
解答例では、素数であることや式変形によって得た満たすべき条件を使ってしらみつぶす量を減らすという方針で解いています。
しかし、現代のコンピュータの圧倒的な計算パワーの前では論理などいらないのです。
力こそパワー。
1. 現代魔法で解いてみよう!
少しどうでもいい話。
プログラムはコンピュータの底知れぬパワーで問題を解決してくれますが、(一部のすごい詳しい人を除いて)ぼくみたいな一般人はコンピュータがどうやって動いているかは知りません。
なんか0と1がピコピコするんでしょ、くらいの認識です。
そんなパワフルさとブラックボックスであることを指して、プログラムのことを現代魔法と呼んでいます。
ぺるコンを作るにあたって主に解答例作成で協力してくれたSOx氏が言い出したことです。
言い得て妙ですね。言い得て妙って言いたかっただけです。
本筋に戻ります。
この3問目の恐らく最初の正解者であるFoxQさん(https://twitter.com/foxq_stm)は、Pythonで解決し、問題文が間違っていることを指摘してくれました。FoxQさんはぺるコンを自身のブログで紹介してくれてもいます。ありがたいことです。以下にそのブログへのリンクを付しておきます。こちらもどうぞ。
ぼく自身はその方法で確かめていなかったので、この機にやってみようと思いました。
Pythonさんに解いてもらうにあたって考えたのは次のことです。
・順列つくるのどうしよう
・重複判定どうしよう
1つめはループ文(for文)をいっぱい使って作ろうかなぁ、でもめんどくさそうだなぁと思って調べたらitertoolsというとても便利な標準ライブラリを見つけたので、それを使いました。たった1行で個の順列を作れました。
2つめは、出題者としては分母の積と分子の組が一致していれば重複とみなす、ということにしていたので、出力もこの条件の下で重複は排除したものにしようと思いました。ここで初心者ぺるせんたげは躓きました。
あれこれ考えた結果、
各項を構成する3つの数の組が3つとも重複していて、更に各項の分子が分母を構成する数に対して同じであれば、重複である。
という定義で判断させることにしました。リストとかディクショナリとかいろいろ使ってなんとか実装できました。
あとはプログラムを動かすだけです。
結果はこうなりました。かっこが多いのは仕様です。

一応確かめてみると、
おおー、合ってますね。
一瞬で答えを導いてくれました。まさに現代魔法。
2. 論理の力で解いてみよう!
一応理系の大学生なので、計算ゴリラにならずちゃんと論理的に解答を導きました。
証明
まず、分母にと
が入らないことを示します。
で、右辺が整数なので左辺も整数である。このとき
なら
は
の倍数のはずだが、
~
の中で
以外に
の倍数はないので矛盾する。よって
となる。対称性から分母に
は入らず、同様に
も分母に入らない。
このことから、と
は分子に入るので、
とできます。
次にと
の分母のどちらにも
が入らないことを示します。
1. が
の分母に入らないこと
とすると
になるはずである。
1-(i). のとき
なので、
まだ使っていない数としてがあるので、これを満たす組は
であるが、
となり不適。
1-(ii). のとき
なので、
まだ使っていない数としてがあるので、これを満たす組は
であるが、それぞれ
かつ
かつ
かつ
かつ
となり不適。
1-(iii). のとき
なので、
まだ使っていない数としてがあるので、これを満たす組は
であるが、それぞれ
かつ
かつ
かつ
かつ
かつ
かつ
となり不適。
以上からである。対称性から
なので、
の分母に
は入りません。
2. が
の分母に入らないこと
とすると
になるはずである。
2-(i). のとき
なので、
まだ使っていない数としてがあるので、これを満たす組は
であるが、
となり不適。
2-(ii). のとき
なので、
まだ使っていない数としてがあるので、これを満たす組は
であるが、それぞれ
かつ
かつ
かつ
かつ
となり不適。
以上からである。対称性から
なので、
の分母に
は入りません。
今度はの分母に
が入らないことを示します。
とすると、
とおいて
このときなので
となる。
について場合分けすると、
(素数)
(素数)
(素数)
(素数)
となり、可能な組が存在しない。
よってである。対称性から
なので、
の分母に
は入りません。
以上から、となります。
分子がすべて決定されたので、とすると、
となり、次のように
通りの変形ができる。
以上の式から、
は
を、
は
を、
は
を約数に持つので、
のうち
を含むものは
または
を含み、
と
は同時には含まれない。
よって可能な組は
またで、
なので、
となる。
について場合分けすると、
(素数)
(素数)
(素数)
(素数)
(素数)
(素数)
上記のうち可能な組は
のみで、このとき
となる。
よって解はのみです。
基本的には場合分けを繰り返します。その場合分けはなるべく少なくなるように工夫し、最終的には通りの場合分けで解けるようにしました。これを多いと感じるか少ないと感じるかは人それぞれだと思います。
まずと
について、素数であることを使って分母に入らないことを示します。そのあとで
が分母に入らないことを示していきます。特殊な値が分母に入ると式の値がおかしくなりそうだという勘でこの順番に分類していきました。
最後はの分母の数で場合分けをしておしまいです。
だいたいどこも素因数分解でとどめを刺していますが、そのときたくさん素数が出てくるのがポイントです。これを見つけたときは気持ちよかったです。
Pythonさんに導いてもらった答えと一致していることがわかります。論理的に答えが1つしか存在しないことが示されました。めでたしめでたし。
A. 分母を積じゃなくて和にしてしまった
SOx氏がツイッターに上げた問題をPythonさんに解いてもらったんですが、そのついでにぺるコン3問目も解いてみようと思って前述のことをしていました。「この機に」とはSOx氏の問題のことです。
そこで致命的なミスをしました。
上記の通り、積と和を取り違えてしまったのです。
これで計算してみたらなんと答えが3つも出てきてびっくり。答えが1つしかないことは証明したはずなのに……と思ったら、プログラムにミスを見つけることができて一安心。
怪我の功名から生まれた改題の答えは次の通りです。

これも一応確かめます。
1つ目:
2つ目:
3つ目:
全部合ってます。答えはこの3通りらしいです。
こんな感じで、
まず方程式を作り
コンピュータに任せ
面白い結果が出たら問題にする
というアプローチで作問するのもいいかもなぁと思いました。これが今回のオチです。
おしまい。
Midyの定理とGinsbergによる拡張とpercentageによる別証明
「散歩してたらこんなの見つけたんだけど」
東洋医学の講義の時間に同級生から教えてもらった問題にまつわる話です。
1. 神社の算学
三重県桑名市にある桑名宗社(春日神社)には以下のような算学があるそうです。

講義中に教えてもらったのは1番(循環小数に関する分割和)です。以下に再掲します。
は循環小数で、循環する数字「」を循環節という。循環節
の数字を
分割、
分割して加えると次のように
が並ぶ数になります。
一般にを素数とするとき
の循環節についても、
分割、
分割して加えると
のように
が並ぶ数になります。
へえ~面白いな~。
ということで、とりあえずが並ぶことを証明していきましょう。
2. 証明
のとき循環しないので
とする。
2分割の場合
循環節を、その桁数を
、
の上半分を
、下半分を
とする。このとき
なので
となる。また、
である。
循環節の上半分と下半分を足したものがほしいので、桁をずらしてを足すと、
ここで、
なので、
となる。
この中で
なので、とおくと、
このとき左辺は整数なので、と
の少なくとも一方は
の倍数である。もし
が
の倍数であれば
は整数
と書くことができ、
となるが、
は
桁なので
は
桁の整数であり、その場合は
の循環節が
桁ということになり矛盾する。よって
が
の倍数である。
は
の最初の小数点以下
桁なので、
は
を満たす最大の整数である。このとき明らかに
なので、
となる。
またなので
である。
は
の倍数だったので、以上の条件から
。
これによりなので
。
よってである。
3分割の場合
基本的な考え方は分割のときと同じですが、もともと技巧的だった式変形が更に複雑になります。
循環節を、その桁数を
、
の上
分の
を
、真ん中
分の
を
、下
分の
を
とする。このとき
なので
となる。また、
である。
循環節の上分の
と真ん中
分の
と下
分の
を足したものがほしいので、桁をずらして
を足すと、
ここで、
なので、
この中で、
とすると、
このとき左辺は整数なので、と
の少なくとも一方は
の倍数である。もし
が
の倍数であれば
は整数
と書くことができ、
となるが、
は
桁なので
は
桁の整数であり、その場合は
の循環節が
桁ということになり矛盾する。よって
が
の倍数である。
で、は
の最初の小数点以下
桁なので、
は
を満たす最大の整数である。このとき明らかに
なので
である。
よって
で、
なので
である。
また、
で、
は
の最初の小数点以下
桁なので、
は
を満たす最大の整数である。このとき明らかに
で、左辺は整数なので、
であり、
なので、
である。
は
の倍数であったので、以上の条件から
となる。
よって
である。
だいぶややこしい計算をしましたが、「循環節の各部分を足したものを作りたい」という簡単な発想を不自然な演算を定義せず自然な代数処理で実現し、小数の持つ自明な制限(小数展開の有限部分と割る数の積が1を超えないこと)を適宜使うことで、知識としては小学校の算数レベルで解決することができました。
アイデアが泥臭すぎた代償(?)として、非常にテクニカルな計算ルートをたどることになりました。上の証明ではあたかも最初からその道が見えていたかのように書かれていますが、実際には証明に4日かかっています……4日ならだいぶ早い方ですけどね。
3. 証明の新規性?
ところで、分割したものを足して
が並ぶという性質はMidyの定理(Midy 1836)と呼ばれ、また
分割についてはGinsbergの論文(Ginsberg 2004)[1]で証明されたらしいです[2]。
!?!?
なんと、21世紀に証明されたばかりの定理を僕も証明できてしまったらしいです。しかもGinsberg 2004を見てみると、上の証明とは違う(とてもスマートな)やり方でした。
もしかしたら新規性のある別証明を作れているのかもしれないと思うとワクワクしますね。
A. 参考
[1] B. D. Ginsberg 2004, Midy’s (Nearly) Secret Theorem — An Extension After 165 Years, College Mathematics Journal, 35 (2004), 26-30.
[2] 循環小数の一性質 -Midy の定理とその一般化-/富山大学理学部 https://www.sci.u-toyama.ac.jp/topics/topics16.html
斜辺を共有するピタゴラス数たち
ピタゴラスの定理というものがあります。
これは直角三角形の辺の長さの関係についての定理で、具体的には次のような主張です。
非常にシンプルです。
直角三角形なら3辺の長さの比が常に上の関係式を満たすというのは自明ではなく、これまでプロアマ問わずたくさんの人がこの定理を調べてきました。
この関係式は全ての辺の長さが整数であるような直角三角形というとても特殊な図形の議論で登場することが多く、特にピタゴラスの定理を満たす3つの整数の組はピタゴラス数と呼ばれ、整数の話題として有名です。
この記事ではピタゴラス数について、斜辺に注目して調べた結果を書いていきます。
以下、ピタゴラス数はピタゴラスの定理を満たす3つの自然数の組とし、原則の関係は上の通りとします。
注:著者は数学に対して厳密性を求め(られ)ない人なので、穏やかな気持ちで読んでください。
- 1. ピタゴラス数の諸性質
- 2. 前準備
- 3. 斜辺を共有する複数のピタゴラス数
- 4. 強い制限下での分解
- 5. 素因数の拡張
- 6. まとめ
- A. おまけ/ピタゴラス数の和差が成すピタゴラス数たち
- 参考資料
1. ピタゴラス数の諸性質
ピタゴラス数は自然数の2乗に関する定理なので、まずは自然数の2乗を観察してみます。
ふむ、よくわからんですね。
よくわからないので適切な"眼鏡"をかけてみます。
規則性が表れました。で割ったあまりを考えると、奇数の
乗は
、偶数の
乗は
になることがわかります(これは非常に簡単に示せます)。
さて、最初の定理において、と
がともに奇数だったらどうなるでしょうか。
なので、
です。
ところで、なので、当然
となります。
しかしも上の規則を満たすはずなので、
でなければいけません。
矛盾しました。つまりと
は同時に奇数になってはいけないのです。
このことから次の事実を得ます(確認してみてください)。
余談ですが、系とは「既知の事実からただちに正しいとわかる主張」のことらしいです。
ここで、と
がともに偶数である場合を考えると、偶数の
乗の和なので、当然
も偶数です。このとき
も偶数になります。
つまり、と
がともに偶数なら3辺とも偶数になるのです。
全部偶数ですね。つまりで割ることができます。割れるものは割っておきたいですよね(NPCの家の壺とか)。
に限らず、ピタゴラス数が互いに素でないとき、それらを最大公約数で割ってもピタゴラス数になります。それなら一番簡単な数の組が好ましいです。
そのような、互いに素であるピタゴラス数を原始ピタゴラス数と言います。定数倍の違いを除けば、全てのピタゴラス数はどれかの原始ピタゴラス数と同一視できるわけです。
このことによって、本質的には原始ピタゴラス数だけ考えれば良い場合が多いです(何を本質と見るかは考える対象によって違いますが)。
このように最大公約数で割って原始ピタゴラス数に変換すると、のうち少なくとも1つは奇数になります(全て偶数なら
で割ることができるため)。そして上の議論から
と
が同時に偶数であれば
も偶数になるため、
と
のどちらか一方は奇数になります。
更に系から、もう一方が偶数になることがわかります。
以上のことから、と
は奇数と偶数のペアに限定され、よって
は奇数に決定されます。
つまり、原始ピタゴラス数のうち、と
は奇数と偶数(どちらが奇数でどちらが偶数でも良い)、
は奇数であることが言えるのです。
他にも、ピタゴラス数を辺の長さとして持つ直角三角形の面積は偶数であるとか、少なくとも1つはの倍数であるとか、ピタゴラス数については色々な事実が知られているらしいですが、今回の話には不要なので省きました。
2. 前準備
ここまででピタゴラス数一般に関する前提知識の確認は終わりで、次からは本題の証明に必要な話です。道具として使うだけなので理解する必要はありません(ぼくも理解していません)。おおらかにいきましょう。
で割って
あまる自然数は、非負整数
を用いて
と表せます。これはフェルマーの二平方和定理によって、2つの整数の
乗の和(二平方和)として表せることが保証されています。
この二平方和への分解は、複素数の世界で考えることで因数分解と見なせます。
右辺の複素数は実部も虚部も整数です。このような複素数をガウス整数、ガウス整数全体の集合(にたし算とかけ算をいい感じに定義したもの)をガウス整数環と言います。環はたし算とかけ算がいい感じになっている集合です。詳しくは触れません。
系の直前に書いた
から、二平方和に分解できる、つまりガウス整数によって因数分解できる素数は
型素数だけであることがわかります(
は例外で、
のように因数分解できます)。この意味において、
型素数のことをガウス素数と言います。ガウス整数環上でも素数であるからです。
ガウス整数環の特徴として、素因数分解が一通りしかないことがあります(一意分解整域)。フェルマーの二平方和定理と合わせて考えることで、型の自然数の二平方和分解が一通りしか存在しないことが言えます。
また、二平方和同士の積も二平方和になることが知られています。
これで本題の斜辺を共有するピタゴラス数たちを考える準備が整いました。
3. 斜辺を共有する複数のピタゴラス数
いよいよ本題に入ります。
斜辺を共有するピタゴラス数とは、ピタゴラスの定理を満たす自然数の組と
で、
であるような組たちのことです。共有すると言うからには2つ以上あります。
そもそもそんな組があるのかどうか疑問かもしれませんが、実際に存在します。
例えば、がそのような斜辺の例です。計算してみましょう。
確かに複数のピタゴラス数が斜辺としてを共有しています。
もう一例あげてみます。
目がチカチカしますね。
驚くべきことに、この8通りの分解は全て原始ピタゴラス数になっています。
ここで2つの疑問が生じます。
・がどのような条件を満たせば
が複数通りの二平方和分解を持つのか?
・は何通りの二平方和分解を持つのか?
これを調べるために、を与えれば自動でピタゴラス数を網羅してくれるプログラムを書いて計算させてみました(上の計算は全てプログラムに投げました)。
すると、原始ピタゴラス数に限って言えば、二平方和分解の個数はの非負整数乗っぽいぞ、ということが見えてきました。
この"のべき乗"という構造は何に由来するのでしょうか?
4. 強い制限下での分解
は
型の自然数です。では、
はどうでしょうか?
は奇数なので、
で割ったあまりは
です。このどちらの場合でも
乗すれば
型になりますが、まずは
の場合を考えます
フェルマーの二平方和定理により、型自然数は二平方和分解が可能です。素数は自然数に含まれるので、当然
型素数も二平方和分解できます。
ここでブラーマグプタの二平方恒等式を思い出してください。二平方和の積は二平方和になるというアレです。
この恒等式によって、が
型素数の積であれば、二平方和分解可能であることが保証されます。
よって、ここではまずの素因数が全て
型素数であるという強い制限の下で斜辺を共有する原始ピタゴラス数の個数を考えていきます。
最初に、の素因数が重複のない
型素数のみである場合です。
cの素因数が重複のない4n+1型素数の場合の分解の個数
ここでとすると、
なので、
ここでとすると、
なので、
上の
これは
よって
ところで、
また、
よって
同様の議論により
以上のことから、
よって
これで、斜辺を共有するピタゴラス数の個数について一定の評価ができました。
見どころ(?)はと
から共通の構造である
を取り出したところですね。
式変形は上手くやれば上手くいくのです。
さて、証明の最後の部分で分解の個数について触れましたが、少なくともと控えめな主張になっていますね。
これはのべき乗構造を生み出す根幹の部分に理由があります。
証明の中で、をガウス整数の範囲で
の4つの因数に分解しましたが、それらの再構成の方法は、なんとブラーマグプタの二平方恒等式に従っています。
上の証明で行った再構成がブラーマグプタの二平方恒等式によることは、以下の式変形(というより文字で置き換えることによるエイリアス)を見ることで様子がはっきりします。
とすると、
なので、
これは二平方和の積なので、ブラーマグプタの二平方恒等式によって次のような2通りの二平方和に分解できる。
上の証明の中に出てくるは全てこの形をしています。確認してみてください。
確かにこれで2通りの分解はできていますが、果たしてこれ以外の分解・再構成は存在しないのでしょうか?
ここにおいて、の分解と再構成の方法がガウス整数の範囲での因数分解とブラーマグプタの二平方恒等式によるもの以外に存在しないことを証明していないので、少なくともという弱い主張に留まっているのです。
実は、他の分解・再構成の方法があるかないかは、著者にはまだわかっていません。
上で触れた自動でピタゴラス数を網羅してくれるプログラムを100回ほど回した限りでは、強い制限下における分解の個数は全てのべき乗(
を含む)でした。なので楽観的に、上記以外の方法はないだろうと予想しています。
次に、の素因数である
型素数の指数が
以外も許される場合、つまり素因数に重複がある場合です。
cの素因数が重複のある4n+1型素数の場合の分解の個数
を
の
番目の素因数、その指数を
とすると、
となる。
とすると、となる。
、
とすると、
である。
とすると、ここでの目標は
を互いに素な自然数による二平方和に分解することなので、やはり
と
、
と
の積を作るのは避けたい。
そのためには、と
を分離しなければならず、それを実現できるのは
と
の2通りしかない。
これは重複のない場合と同じなので、分解の個数も同じになる。
つまり、の素因数である
型素数にどのような重複があっても、分解の個数は素因数の指数
によらないことがわかった。
を構成する素因数が
型素数のみであれば、その重複に関係無く、素因数の種類の数のみによって分解の個数が決まるということです。指数の変動に対して安定であると言えます。
今までは原始ピタゴラス数(原始解と呼ぶことにします)にしか注目してきませんでしたが、非原始解の個数は指数が大きいほど増えていくようです。非原始解の個数を表す式はまだありません。読者への演習問題としても良いかもしれませんね。
5. 素因数の拡張
前節で、の素因数が
型素数のみである場合を考えました。
型素数は二平方和に分解できないガウス素数で、扱いにくいからです。
例えば、が
型素数の場合、
はピタゴラス数になりません。
cが4n+3型素数でないことの証明
を
型素数とする。
が成り立つと仮定すると、
となる。3つの自然数
ただし
と
は互いに素
によって
とすると、
なので、
としても良い(符号をこのように設定しても一般性を失わない)。
※ここでは
と
の最大公約数を意識しています。
すると、なので、
となる。
を整数として、
と
の偶奇について考えると、
かつ
のとき:
に反するので矛盾。
かつ
のとき:
と表すことができ、
が奇数、
が素数であることから
。
そのときとなるので矛盾。
かつ
のときも同様に矛盾する。
かつ
のとき:
で、連続する2整数の積は偶数になるので、
と表すことができ、
が奇数、
が素数であることから
。
そのときとなるので矛盾。
以上の3パターン全てで矛盾するので、は
型素数ではない。
上の結果は、たとえが
型整数であっても
が
型素数であれば二平方和分解ができないことを主張しています。これはフェルマーの二平方和定理に矛盾しているように見えますが、
と
の場合があるので矛盾していません。上の証明では
を自然数に限定しているので、
が使えなくなっているのです(今更ですが自然数に
を含めないことにしています)。
上の結果を使うと、の素因数に
型素数が含まれる場合、
は原始解を持たないことがわかります。
を
型素数、
を
の指数、
を
型素数、
を
の指数として、
を
とします。
これまでと同様に個々の素数を二平方和に分解してからブラーマグプタの二平方恒等式に従って再構成しようとすると、が二平方和に分解できないので、
のように分解してから係数のようにかけるしかなく、これだと
が互いに素にならないので、原始解を作ることができません。
この場合でも非原始解は存在しますが、個の
型素数によって作られた
個の分解に
型素数を全てかけた形のものしか得られないため、分解の個数は変わりません。
また当然ですが、二平方和をで割ったあまりは
か
なので、
がこのどちらでもない場合はピタゴラス数を構成しません。
6. まとめ
以上の結果をまとめると、次のようになります。
について、
の場合:
1つのに対して原始ピタゴラス数は少なくとも
個存在する
非原始解を含めるともっとたくさん存在すると予想される
の場合:
ピタゴラス数にならない
が非負偶数のとき:
原始解を持たないが、非原始解を少なくとも個持つ
斜辺を共有するピタゴラス数の個数が(もし分解・再構成の方法が他に無ければ)のべき乗という非常に特殊な値を取るのは面白いと思いました。
A. おまけ/ピタゴラス数の和差が成すピタゴラス数たち
上の議論を考えているときに訪れた寄り道的な話題を紹介します。
が複数通りの二平方和に分解されるとき、ブラーマグプタの二平方恒等式とエイリアスによって、次のように整理されます。
ただし
は
型の自然数
のとき、
と表すことができる。
ここでとすると、
となる。
が奇数、
が偶数なので、
は奇数、
は偶数となる。
ここで新たに
、
、
、
、
つまりと共に原始解を構成する2数のうち偶奇を揃えて足したり引いたりした数を考えると、
となり、これらもピタゴラス数になります。どちらも原始ピタゴラス数の倍なので、
で割ることができます。
それらのうちで割って奇数になるもの同士、
で割って偶数になるもの同士の和や差を考えると、これまたピタゴラス数になっています。
以下、この操作をどこまで続けても、生成される数は全てピタゴラス数です。
追記(2022/02/06)
続きを書きました。こちらもどうぞ↓↓↓
参考資料
ガウス整数 - Wikipedia
ブラーマグプタの二平方恒等式 - Wikipedia
一意分解環 - Wikipedia
手作業で円周率を求めよう
円周率を求める方法は無数にあります。
多角形で挟んで範囲を狭める古典的な方法は中学校とかで聞いたかもしれません。ラマヌジャンとかいうインド人が立てた狂気の式の中にも円周率を計算するものがありますが、円周率あたりは沼なので深く立ち入らないことにします。調べればいくらでも謎の級数による導出があるので、それらの難しい話は偉大なGoogle先生に任せ、この記事では頭ではなく手を動かして円周率を求めていきます。前提知識は小学校の算数程度、使う道具は鉛筆、定規、コンパスとすごく大きな紙です。
そもそも円周率とはなんなのか
まずは円周率が何かを確認しておきます。
円周率とは円の周長と直径の比です。
なので、何も難しいことを考えなくても、これら2つの長さがわかれば良いのです。この記事で紹介する方法もこれら2つの長さを測定して円周率を求めていきます。
測定可能なモデルを作る
最も正確な方法は真円の直径と円周長を測ることですが、真円の円周長を測ることは非常に難しいです。それができたら苦労はしません。真の値を知るのは無理なので、近似値を求めます。
何で円を近似しようか……と考えると、やはり多角形がまっさきに思いつきました。素直にこれを使います。
さて、古典的な多角形による円周率の近似の難しさは、図形の精密さに尽きると思います。コンパスで描いた円に対して多角形の角を増やせば、どんどん辺は短くなり、ある段階で一定水準以上の精度の測定が不可能になるからです。
ここで、円周率の定義を思い出してください。円周率とは円の周長と直径の比です。2つの値の比なので、円周率を測定する方法としては、既知の直径に対して周長を測定するというのと、既知の周長に対して直径を測定するという2つのアプローチがあります。上の方法は前者を採用した結果精度の問題で詰んでいるので、今回は後者を採用します。
そうすると何が良いかというと、辺を短くしなくて済むのです。ですがこれはトレードオフになっていて、今度は多角形の構成が難しくなります。
やることは長さ既知の辺によってなるべく正確に正多角形を作り、なるべく正確にその直径に相当する対角線の長さを測定するというシンプルなものですが、ここで2つの問題が生じます。
1つ目は、正多角形をどうやって正確に構成するか、つまり隣り合う辺の成す角の精度をどう保証するかです。これはコンパスによる角の2等分線の作図によって解決します。しかも、角の2等分線の作図において基準となる長さを十分大きくすれば、コンパスの操作による誤差や引かれた線の太さによる誤差も小さくすることができます。
ただしこの解決法によって作図できる正多角形が正2n角形に限定されますが、関心は円周率にあるので、別に問題にはなりません。
2つ目は、直径の測定による誤差です。1つ目の問題の解決法によって正2n角形を利用することになったので、直径相当の対角線は容易に特定できますが、その長さの測定には古典的な方法と同様に精度の限界が存在します。どうすれば良いでしょうか?
実は、今回はそもそもこれが問題になっていないのです。角を増やせばそれだけ直径も大きくなりますが、定規による測定誤差の大きさは変わらないので、正2n角形が円に近づくほど測定誤差を無視できるようになるのです。素晴らしいですね。
この方法の妥当性
前述の方法で円周率を近似できそうだというのは直感的にはわかりますが、一応証明しておきます。ここだけ高校数学レベルですが結果的には正しいので飛ばしても良いです。
証明
1辺が2の正n角形をとする。
を角を底角としてn分割した図形を考えると、それは底辺の長さが2で頂角の大きさが
の二等辺三角形である。底辺ではない辺の長さを
とすると、
なので
となる。よって
手を動かそう
さてこれで準備は整いました。以下の手順で円周率を求めていきます。
1. 1辺の長さが2cmの正8角形を作図する
2. 角の2等分線の作図によって正8角形と1つの辺を共有する正16角形を作図する
3. 2の手順を繰り返すことで正2n角形を作図する
4. 正n角形の対角線の長さを測る
5. 周長(=2n)を対角線の長さで割る
6. 円周率の近似値!嬉しい!!!
実際にやってみた
以下のようになりました。
n=8のとき:
n=16のとき:
n=32のとき:
n=64のとき:
かなり面倒だった割には、この程度の近似ではあまり良い精度では得られませんでした。しかし特別な道具、精密な作業、難しい考え方なしに近似値を求められることに嬉しさを感じました。
連続するΣをΠでまとめる
たし算とかけ算の間には
という関係がありますが(伝われ)、実はこれが と
にも言えそうなのです。つまり
も言えそう、という感じ。
これは自分で作った問題を解く過程で発見したもので、先に予想が立ってから証明しました。必要は発明の母とはよく言ったものですね。
まずは結果から
結果から言うと、こうなります。
ゴツい。
等号の左右で見比べてみると、個あった
がたった1個の
にまとまっています。嬉しいです。
これが成り立つことを示します。そう、みんな大好き証明タイムです。
補題ってかっこいい
定理1を示すにあたり、以下の補題を考えます。
が消えています。あとでこれを繰り返し使うことで
をまとめていくので、これが本質的な部分です。
以下の補題の証明は昔どこかのサイトで見たもののほぼそのままです。どこだったか覚えがなくてリンクを貼れないこと、引用元を明示できないことが残念ですが、必要なので使わせていただきます。どなたか心当たりがある方は教えていただけるとありがたいです。
証明
とおくと
なので
となる。ところで
なので
元の記号に戻すことで
が得られた。
定理1の証明
続いて定理1の証明です。めちゃくちゃゴツいです。
証明
なので
これを繰り返し適用することで
このままでも+ととの関係として十分面白いのですが、よく見ると一番右の
は1をたしています。これではつまらないので、実用性を与えるために定理1を拡張します。
どんな数列でも足せる
定理1では1を足していました。定理1を拡張した定理2では任意の数列を足せるようにします。
とすると
がありませんが、内部では
がまとめられています。なので証明の中で定理1の証明で使った補題を再利用します。
紛らわしいですが、数列と添字数列
は全く関係のないものであることに注意してください。
また、を形式的に数列ということにしましたが、これは定理の形の都合で
から自然に定義されるもので、自動的に
となります。Σが並んでいるので、区別のために添字数列のようにまとめて扱いましたが、本来的に数列である必要性はありません。
よって、形式的な入れ替えが可能です。
定理2の証明
帰納法で示す。
ステップ1
のとき
ステップ2
のとき成り立つと仮定
するとのとき
式変形を続けると、
ここで補題を適用すると
これで定理1の拡張版である定理2が得られました。任意の数列を好きなだけ足し上げることができます。
ステップ2で足す順番を変えるところは、具体的に表を書いてみるとわかりやすいです。あとは技術的な問題なので、式をいじくり回すだけです。
実際に使ってみる
せっかくなので、フィボナッチ数列を例に定理2を使ってみます。
、
、とすると
愚直に足す
定理2を使う
一致しました。定理2を使った方がずっと楽に計算できました。素晴らしいです。
追記(2019/12/01)
先日大学で友達と一緒にお昼を食べていたら、
「特定のfor文のネストを線形時間で解けるようになる高速化アルゴリズムなんじゃない?」
という話が上がりました。
使う場面がどれだけあるかはさておいて、確かにm重ループの計算がO(Nm)からO(N)に削減できている気がします。
なかなか良い結果が得られたなぁとニヤニヤを深めました。
