原始ピタゴラス数

画像:Berggrens's tree with reordered path keys.svg|450px|thumb|原始ピタゴラス数の三分木の第4層まで。この木にはモレ・ダブリがない。
原始ピタゴラス数（げんしピタゴラスすう、primitive Pythagorean triples）とは、ピタゴラス数のうち3つの数が互いに素であるものをいう。つまり、自然数の3つ組 (a, b, c) であって、- （ピタゴラス数の条件）- math2|1=gcd(a, b, c) = 1（原始性の条件）
をともに満たすもののことである。

**概要**
3個の自然数の組 (a, b, c) がピタゴラス数であることは、その最大公約数を g として  と表すと、 がピタゴラス数であることと同値である。ゆえに、ピタゴラス数には  のみに着目し、これは原始ピタゴラス数と呼ばれている。
ピタゴラス数が原始的（あるいは素 (coprime) とも言う）であることと、3個の自然数のうちある2個が互いに素であることは同値である（一般に、ピタゴラス数 (a, b, c) について 1=gcd(a, b, c) = gcd(a, b) = gcd(b, c) = gcd(a, c) が成り立つ）。
原始ピタゴラス数には重複なく生成する式、そしてそれを効率良く列挙するアルゴリズムが知られており、そのアルゴリズムによって原始ピタゴラス数全体を三分木で表すことができる。

**リスト（三分木を含まない）**
原始ピタゴラス数 (a, b, c) の3数の表示順は、c を斜辺とするのが一般的であるが、その上で、- a  n- m と n の偶奇は異なる（一方が奇数で他方が偶数）
を満たす。
これに対してブラフマグプタの式とは、
 または 
の形のことである。ここで、p, q は自然数で- p, q は互いに素- p > q- p, q は奇数
を満たす。
ユークリッド式とブラフマグプタ式には 1=(p, q) = (m + n, m − n) の関係があり、本質的には同じである。ただし、周長は、ユークリッド式では 2m(m + n)、ブラフマグプタ式では p(p + q) となり、ブラフマグプタ式の方が式が簡単になることがある。
『数学ガール』（結城浩著）では、ユークリッドの式は「ピタゴラ・ジュース・メーカー」とネーミングされて取り上げられている。

**生成式の導出**
ユークリッドの式は、以下のようにして導出できる。
3段構成で証明される。
#a と b は偶奇が異なる
#a が偶数とすると、 は平方数
# または 
1. (a, b, c) は原始的であるから、a と b の少なくとも1つは奇数である。
も b も奇数であると仮定すると、



これは  に矛盾。
故に、a と b は偶奇が異なる。
2. a が偶数、b が奇数の場合について証明する（他の場合は a, b を入れ替えればよい）。
（a' は整数）とおく。

ここで c + b と c − b は偶奇が一致するから、（ともに奇数だとすると上の等式を満たさないため）
1=c + b = 2u, c − b = 2v（u, v は自然数）
とおくことができる。
ここで 1=c = u + v, b = u − v は互いに素であるから、u, v は互いに素であることが導ける。さらに u + v, u − v は偶奇が一致するから u − v は奇数である。
逆に、u, v は互いに素で u − v が奇数ならば、1=c = u + v, b = u − v は互いに素であることも導ける。


は互いに素だから、（m, n は互いに素な自然数）とおくことができる。
このとき 
より m > n
は奇数より m − n は奇数。
3. 2.より 

∴ 1=a = 2mn ■

**生成アルゴリズム**

**タイルの操作**
原始ピタゴラス数全体を分類するために、ピタゴラスの生成式における (m, n)（ただし m ≠ 2）の「退化」を次で定義するdate=2023年9月：
2辺が n, m の長方形と2辺が n, 2n の長方形の内、含む方から含まれる方を取り除いて出来る長方形（対称差）の短辺を n'、長辺を m' とする。
この「退化」は  の値により、3タイプに分類される：- のとき：1=(m′, n′) := (n, 2n − m)（操作u とする）- のとき：1=(m′, n′) := (n, m − 2n)（操作a とする）- のとき：1=(m′, n′) := (m − 2n, n)（操作d とする）
こうして得られた新たな (m′, n′) も満たすべき条件：
*m′, n′ は互いに素
*m′ > n′
*m' と n' の偶奇は異なる
を満たすことが、ユークリッドの互除法と仮定より従う。しかも、「退化」を1回施すと m は狭義減少する。
この「退化」を繰り返していくと、有限回で (2, 1) になる。
（なぜなら、m > n より有限回で 1=n = 1 になる。このとき偶奇性より (2k, 1)（k は自然数）の形になるから。）
逆に考えると、操作 u, a, d は全単射と分かる。実際に、操作 u, a, d の逆写像「添加」はそれぞれ
*操作U：
*操作A：
*操作D：
となり、それぞれ
*長辺を一辺とする正方形2個から、もとの長方形を除く
*長辺に正方形を2個くっつける
*短辺に正方形を2個くっつける
に対応している（短辺は広義増加、長辺は狭義増加する）。
故に、全ての (m, n) は (2, 1) に「添加」を有限回施すことで、モレ・ダブリがなく得られると分かる。故に、原始ピタゴラス数全体は、(3, 4, 5) から枝分かれした、モレ・ダブリのない、三分木で分類されると分かる。
上記の議論は、ブラフマグプタの式でも同様にできる。ただしユークリッドの式とブラフマグプタの式では、u, a, d の定義の順序を逆にする必要がある（でないと操作が対応しなくなる）。
細矢治夫は著書で、U は up、D は down、A は across を意味していると述べている。
（例）
の (2, 1) からの「添加」列を求める。



故に、(14, 9) は、(2, 1) に操作 D, A, U を順に施したものであると分かる。//
歴史的には、初期値 (2, 1) に
操作U を繰り返して得られる原始ピタゴラス数の列は「ピタゴラス系列」、
操作A からは「フェルマー系列」、
操作D からは「プラトン系列」
と呼ばれている。
*各系列の斜辺列はA001844、A001653、A053755を参照。
*フェルマー系列はA114336を参照。

**原始ピタゴラス数の変換式**
全ての原始ピタゴラス数 （ は転置を表す）は、 に次の行列 U, A, D を左から有限回掛ける（作用させる）ことで、一意に得られることが、前節の「添加」より分かる：
ここから次のことが分かる：直角三角形において、
操作U は、斜辺と偶数辺の差を保つ。
操作A は、直角をはさむ2辺の差を 反数|(−1)倍にする。
操作D は、2個の奇数の長さの差を保つ。

**分数表示による求値**
の操作は、（これは既約分数である）と分数表示すると、関数値の計算により求められるdate=2023年9月。
#タイルの操作で表した「退化」u, a, d を分数表示すると
*操作u：
*操作a：
*操作d：
となる。
（例1）
例えば、1=(m, n) = (14, 9) の「退化」列は、



となり、 とおくと

と分かる。
（例2）1=(m, n) = (11, 8)



となり、

と分かる。
（例3）1=(m, n) = (28, 13)




となり、

と分かる。//
この分数表示は計算機に入れやすい。これをプログラミング言語Javaのメソッドとして実装すると、
public static boolean inverseUAD( int m, int n ) {
if (!(0  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);
}
のようになる。これにより例えば

などが求まる。

**由来と歴史**
原始ピタゴラス数の三分木構造は古代バビロニアにおいてすでに発見されていたようであることが、プリンプトン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個ずつであるという点が異なる。

**脚注**

**外部リンク**
 原始ピタゴラス数の木- urlname=PythagoreanTriple-  pythagorean triplets pythagorean triples - 原始ピタゴラス数の値を出力できるサイト