原始ピタゴラス数

原始ピタゴラス数（げんしピタゴラスすう、英: primitive Pythagorean triples）とは、ピタゴラス数のうち3つの数が互いに素であるものをいう。つまり、自然数の3つ組 (a, b, c) であって、 a2 + b2 = c2（ピタゴラス数の条件） gcd(a, b, c) = 1（原始性の条件） をともに満たすもののことである。 3個の自然数の組 (a, b, c) がピタゴラス数であることは、その最大公約数を g として (a, b, c) =: (ga0, gb0, gc0) と表すと、(a0, b0, c0) がピタゴラス数であることと同値である。ゆえに、ピタゴラス数には (a0, b0, c0) のみに着目し、これは原始ピタゴラス数と呼ばれている。 ピタゴラス数が原始的（あるいは素 (coprime) とも言う）であることと、3個の自然数のうちある2個が互いに素であることは同値である（一般に、ピタゴラス数 (a, b, c) について gcd(a, b, c) = gcd(a, b) = gcd(b, c) = gcd(a, c) が成り立つ）。 原始ピタゴラス数には重複なく生成する式、そしてそれを効率良く列挙するアルゴリズムが知られており、そのアルゴリズムによって原始ピタゴラス数全体を三分木で表すことができる。 原始ピタゴラス数 (a, b, c) の3数の表示順は、c を斜辺とするのが一般的であるが、その上で、 a < b (< c) とするもの a, b は偶奇が異なる（#生成式参照）ので、 b を偶数辺とするもの a を偶数辺とするもの がある。 ユークリッドの式では b を偶数辺、ブラフマグプタの式では a を偶数辺としていることが多い。 ここでは a < b < c とし、c の小さい順に並べると、c < 300 までは以下の47通りである： このうち、第1項が偶数であるものは22個である。 斜辺、最小辺、中間長それぞれの昇順列はオンライン整数列大辞典の数列 A020882、オンライン整数列大辞典の数列 A046086、オンライン整数列大辞典の数列 A046087を参照。 周長が昇順となる原始ピタゴラス数の列はオンライン整数列大辞典の数列 A103606を参照。 原始ピタゴラス数 (a, b, c) の生成式は、ユークリッドの式とブラフマグプタの式が知られている。ただし a, b の順番は流儀によりまちまちである。 ユークリッドの式またはピタゴラスの公式とは、 (a, b, c) = (m2 − n2, 2mn, m2 + n2) または (2mn, m2 − n2, m2 + n2) の形のことである。ここで、m, n は自然数で m, n は互いに素 m > n m と n の偶奇は異なる（一方が奇数で他方が偶数） を満たす。 これに対してブラフマグプタの式とは、 (a, b, c) = (p2 − q2/2, pq, p2 + q2/2) または (pq, p2 − q2/2, p2 + q2/2) の形のことである。ここで、p, q は自然数で p, q は互いに素 p > q p, q は奇数 を満たす。 ユークリッド式とブラフマグプタ式には (p, q) = (m + n, m − n) の関係があり、本質的には同じである。ただし、周長は、ユークリッド式では 2m(m + n)、ブラフマグプタ式では p(p + q) となり、ブラフマグプタ式の方が式が簡単になることがある。 『数学ガール』（結城浩著）では、ユークリッドの式は「ピタゴラ・ジュース・メーカー」とネーミングされて取り上げられている。 ユークリッドの式は、以下のようにして導出できる。 3段構成で証明される。 a と b は偶奇が異なる a が偶数とすると、c + b/2, c − b/2 は平方数 (a, b, c) = (m2 − n2, 2mn, m2 + n2) または (2mn, m2 − n2, m2 + n2) 1. (a, b, c) は原始的であるから、a と b の少なくとも1つは奇数である。 a も b も奇数であると仮定すると、 a 2 = ( 2 k + 1 ) 2 = 4 k 2 + 4 k + 1 ≡ 1 ( mod 4 ) {\displaystyle a^{2}=(2k+1)^{2}=4k^{2}+4k+1\equiv 1{\pmod {4}}} b 2 ≡ 1 ( mod 4 ) {\displaystyle b^{2}\equiv 1{\pmod {4}}} ∴   a 2 + b 2 ≡ 1 + 1 = 2 ( mod 4 ) {\displaystyle \therefore \ a^{2}+b^{2}\equiv 1+1=2{\pmod {4}}} これは c2 ≡ 0, 1 (mod 4) に矛盾。 故に、a と b は偶奇が異なる。 2. a が偶数、b が奇数の場合について証明する（他の場合は a, b を入れ替えればよい）。 a =: 2a′（a' は整数）とおく。 4 a ′ 2 = ( 2 a ′ ) 2 = a 2 = c 2 − b 2 = ( c + b ) ( c − b ) {\displaystyle {\begin{aligned}4a'^{2}&=(2a')^{2}\\&=a^{2}\\&=c^{2}-b^{2}\\&=(c+b)(c-b)\end{aligned}}} ここで c + b と c − b は偶奇が一致するから、（ともに奇数だとすると上の等式を満たさないため） c + b = 2u, c − b = 2v（u, v は自然数） とおくことができる。 ここで c = u + v, b = u − v は互いに素であるから、u, v は互いに素であることが導ける。さらに u + v, u − v は偶奇が一致するから u − v は奇数である。 逆に、u, v は互いに素で u − v が奇数ならば、c = u + v, b = u − v は互いに素であることも導ける。 4 a ′ 2 = 2 u ⋅ 2 v = 4 u v {\displaystyle {\begin{aligned}4a'^{2}&=2u\cdot 2v\\&=4uv\end{aligned}}} ∴   a ′ 2 = u v {\displaystyle \therefore \ a'^{2}=uv} u, v は互いに素だから、u = m2, v = n2（m, n は互いに素な自然数）とおくことができる。 このとき c + b = 2m2, c − b = 2n2 u > v より m > n u − v = (m + n)(m − n) は奇数より m − n は奇数。 3. 2.より c = m2 + n2, b = m2 − n2 a 2 = c 2 − b 2 = ( c + b ) ( c − b ) = 2 m 2 ⋅ 2 n 2 = 4 m 2 n 2 {\displaystyle {\begin{aligned}a^{2}&=c^{2}-b^{2}\\&=(c+b)(c-b)\\&=2m^{2}\cdot 2n^{2}\\&=4m^{2}n^{2}\end{aligned}}} ∴ a = 2mn ■ 原始ピタゴラス数全体を分類するために、ピタゴラスの生成式における (m, n)（ただし m ≠ 2）の「退化」を次で定義する[要出典]： 2辺が n, m の長方形と2辺が n, 2n の長方形の内、含む方から含まれる方を取り除いて出来る長方形（対称差）の短辺を n'、長辺を m' とする。 この「退化」は m/n の値により、3タイプに分類される： (1 <) m/n < 2 のとき：(m′, n′) := (n, 2n − m)（操作u とする） 2 < m/n < 3 のとき：(m′, n′) := (n, m − 2n)（操作a とする） m/n > 3 のとき：(m′, n′) := (m − 2n, n)（操作d とする） こうして得られた新たな (m′, n′) も満たすべき条件： m′, n′ は互いに素 m′ > n′ m' と n' の偶奇は異なる を満たすことが、ユークリッドの互除法と仮定より従う。しかも、「退化」を1回施すと m は狭義減少する。 この「退化」を繰り返していくと、有限回で (2, 1) になる。 （なぜなら、m > n より有限回で n = 1 になる。このとき偶奇性より (2k, 1)（k は自然数）の形になるから。） 逆に考えると、操作 u, a, d は全単射と分かる。実際に、操作 u, a, d の逆写像「添加」はそれぞれ 操作U：(m, n) = (2m′ − n′, m′), m/n < 2 操作A：(m, n) = (2m′ + n′, m′), 2 < m/n < 3 操作D：(m, n) = (m′ + 2n′, n′), m/n > 3 となり、それぞれ 長辺を一辺とする正方形2個から、もとの長方形を除く 長辺に正方形を2個くっつける 短辺に正方形を2個くっつける に対応している（短辺は広義増加、長辺は狭義増加する）。 故に、全ての (m, n) は (2, 1) に「添加」を有限回施すことで、モレ・ダブリがなく得られると分かる。故に、原始ピタゴラス数全体は、(3, 4, 5) から枝分かれした、モレ・ダブリのない、三分木で分類されると分かる。 上記の議論は、ブラフマグプタの式でも同様にできる。ただしユークリッドの式とブラフマグプタの式では、u, a, d の定義の順序を逆にする必要がある（でないと操作が対応しなくなる）。 細矢治夫は著書で、U は up、D は down、A は across を意味していると述べている。 （例） (m, n) = (14, 9) の (2, 1) からの「添加」列を求める。 (14, 9) u↦ (9, 2 × 9 − 14) = (9, 4) (14, 9) a↦ (4, 9 − 2 × 4) = (4, 1) (14, 9) d↦ (4 − 2 × 2, 1) = (2, 1) 故に、(14, 9) は、(2, 1) に操作 D, A, U を順に施したものであると分かる。// 歴史的には、初期値 (2, 1) に 操作U を繰り返して得られる原始ピタゴラス数の列は「ピタゴラス系列」、 操作A からは「フェルマー系列」、 操作D からは「プラトン系列」 と呼ばれている。 各系列の斜辺列はオンライン整数列大辞典の数列 A001844、オンライン整数列大辞典の数列 A001653、オンライン整数列大辞典の数列 A053755を参照。 フェルマー系列はオンライン整数列大辞典の数列 A114336を参照。 全ての原始ピタゴラス数 t(a, b, c)（t は転置を表す）は、t(3, 4, 5) に次の行列 U, A, D を左から有限回掛ける（作用させる）ことで、一意に得られることが、前節の「添加」より分かる： U = ( 1 − 2 2 2 − 1 2 2 − 2 3 ) {\displaystyle U={\begin{pmatrix}1&-2&2\\2&-1&2\\2&-2&3\end{pmatrix}}} A = ( 1 2 2 2 1 2 2 2 3 ) {\displaystyle A={\begin{pmatrix}1&2&2\\2&1&2\\2&2&3\end{pmatrix}}} D = ( − 1 2 2 − 2 1 2 − 2 2 3 ) {\displaystyle D={\begin{pmatrix}-1&2&2\\-2&1&2\\-2&2&3\end{pmatrix}}} ここから次のことが分かる：直角三角形において、 操作U は、斜辺と偶数辺の差を保つ。 操作A は、直角をはさむ2辺の差を (−1)倍にする。 操作D は、2個の奇数の長さの差を保つ。 (m, n) の操作は、m/n（これは既約分数である）と分数表示すると、関数値の計算により求められる[要出典]。 #タイルの操作で表した「退化」u, a, d を分数表示すると 操作u：m/n ↦ 1 / (2 − m/n) ((1 <) m/n < 2) 操作a：m/n ↦ 1/ (m/n − 2) (2 < m/n < 3) 操作d：m/n ↦ m/n − 2 (m/n > 3) となる。 （例1） 例えば、(m, n) = (14, 9) の「退化」列は、 14/9 u↦ 1 / (2 − 14/9) = 9/4 14/9 a↦ 1 / (9/4 − 2) = 4/1 14/9 d↦ 4/1 − 2 = 2/1 となり、e := 2/1 とおくと 14/9 = UAD(e) と分かる。 （例2）(m, n) = (11, 8) 11/8 u↦ 1 / (2 − 11/8) = 8/5 11/8 u↦ 1 / (2 − 8/5) = 5/2 11/8 a↦ 1 / (5/2 − 2) = 2/1 となり、 11/8 = UUA(e) と分かる。 （例3）(m, n) = (28, 13) 28/13 a↦ 1 / (28/13 − 2) = 13/2 28/13 d↦ 13/2 − 2 = 9/2 28/13 d↦ 9/2 − 2 = 5/2 28/13 a↦ 1 / (5/2 − 2) = 2/1 となり、 28/13 = ADDA(e) と分かる。// この分数表示は計算機に入れやすい。これをプログラミング言語Javaのメソッドとして実装すると、 public static boolean inverseUAD( int m, int n ) { if (!(0 < m) || !(m < n)) { System.out.println(" m と n の値が 0 < m < n になっていません。"); return false; } if (Arithmetic.gcm(m, n) > 1 ) { System.out.println(" m と n の値が 互いに素ではありません。"); return false; } if (((n - m) % 2) == 0 ) { System.out.println(" m と n の偶奇数は異なっていなければなりません。"); return false; } System.out.print("( " + m + ", " + n + " ) = "); System.out.print("{ " + ((n * n) - (m * m)) + ", " + (2 * m * n) + ", " + ((n * n) + (m * m)) + " } = "); return _inverseUAD(m, n); } private static boolean _inverseUAD( int m, int n ) { // e if ((m == 1) && (n == 2)) { System.out.println("e"); return true; } // D if (n > (m + m + m)) { System.out.print("D"); return _inverseUAD(m, n - (m + m)); } // A if (n > (m + m)) { System.out.print("A"); return _inverseUAD(n - (m + m), m); } // U System.out.print("U"); return _inverseUAD((m + m) - n, m); } のようになる。これにより例えば {17884483, 12073356, 21578245} = (4442, 1359) = DUUUAAUAUUDA(e) などが求まる。 原始ピタゴラス数の三分木構造は古代バビロニアにおいてすでに発見されていたようであることが、プリンプトン322から窺われる。ギリシャ数学においては、ピタゴラスおよびユークリッドによって興味を持たれていたものの、一部が失われていたようである。三分木に現れる「プラトン系列」「ピタゴラス系列」などは再発見されたようであるが、もう一本の枝（直角をはさむ2辺の差が1である系列）はクラウディオス・プトレマイオスによって発見されていたかもしれないが、17世紀にフェルマーに着目されるまでヨーロッパ数学界では少なくとも周知はされていなかったようである。直角をはさむ2辺の差が1である系列は古代バビロニアでは知られていたようであることがYBC 7289から窺われる。 操作U・D・A により「原始ピタゴラス数全体は重複なく三分木をなす」ことが、1963年にオランダのバーニング (F.J.M.Barning)、1970年にアメリカのホール (A.Hall)、また1993年頃に日本の亀井喜久男によって独立に発見・発表された。ただし、バーニング、ホール、亀井の何れの発表についても、各操作はどの表現行列に該当するか?という逆問題が未解決だった。実際に細矢治夫は2012年の著書で「バーニングとホールの（中略）理論の大きな泣き所は, 任意の二つの規約ピタゴラスの三角形を選んだときに, その両者を結ぶU, D, A の組合せが存在するかの判定, またもし存在するとしてもその組合せを知る簡単な手だてがないことである」と述べている。 フィボナッチ数は幾何学的には、長方形に正方形をくっつけていって出来る長方形の長辺であり、この図形を「（一般の）フィボナッチ螺旋」と呼ぶ（特に初期値が単位正方形の場合は、いわゆるフィボナッチ数列に対応している）。これに対してユークリッドの互除法はフィボナッチ螺旋の逆回しといえる。故に、フィボナッチ数は互いに素である。 ただし、原始ピタゴラス数の生成アルゴリズムについては、(m, n)（あるいは (p, q)）の偶奇性の条件も必要であるため、長方形にくっつける正方形が2個ずつであるという点が異なる。