原始ピタゴラス数
From Wikipedia, the free encyclopedia
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通りである:
| (3, 4, 5) | (5, 12, 13) | (8, 15, 17) | (7, 24, 25) |
| (20, 21, 29) | (12, 35, 37) | (9, 40, 41) | (28, 45, 53) |
| (11, 60, 61) | (16, 63, 65) | (33, 56, 65) | (48, 55, 73) |
| (13, 84, 85) | (36, 77, 85) | (39, 80, 89) | (65, 72, 97) |
| (20, 99, 101) | (60, 91, 109) | (15, 112, 113) | (44, 117, 125) |
| (88, 105, 137) | (17, 144, 145) | (24, 143, 145) | (51, 140, 149) |
| (85, 132, 157) | (119, 120, 169) | (52, 165, 173) | (19, 180, 181) |
| (57, 176, 185) | (104, 153, 185) | (95, 168, 193) | (28, 195, 197) |
| (84, 187, 205) | (133, 156, 205) | (21, 220, 221) | (140, 171, 221) |
| (60, 221, 229) | (105, 208, 233) | (120, 209, 241) | (32, 255, 257) |
| (23, 264, 265) | (96, 247, 265) | (69, 260, 269) | (115, 252, 277) |
| (160, 231, 281) | (161, 240, 289) | (68, 285, 293) |
このうち、第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 は自然数で
を満たす。
これに対してブラフマグプタの式とは、
- (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]。
生成式の導出
ユークリッドの式は、以下のようにして導出できる。
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 も奇数であると仮定すると、
これは c2 ≡ 0, 1 (mod 4) に矛盾。
故に、a と b は偶奇が異なる。
2. a が偶数、b が奇数の場合について証明する(他の場合は a, b を入れ替えればよい)。
a =: 2a′(a' は整数)とおく。
ここで 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 は互いに素であることも導ける。
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 = 2mn ■
生成アルゴリズム
タイルの操作
原始ピタゴラス数全体を分類するために、ピタゴラスの生成式における (m, n)(ただし m ≠ 2)の「退化」を次で定義する[要出典]:
この「退化」は 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 を意味していると述べている[4]。
(例)
(m, n) = (14, 9) の (2, 1) からの「添加」列を求める。
- (14, 9) (9, 2 × 9 − 14) = (9, 4)
- (14, 9) (4, 9 − 2 × 4) = (4, 1)
- (14, 9) (4 − 2 × 2, 1) = (2, 1)
故に、(14, 9) は、(2, 1) に操作 D, A, U を順に施したものであると分かる。//
歴史的には、初期値 (2, 1) に
と呼ばれている。
- 各系列の斜辺列はオンライン整数列大辞典の数列 A001844、オンライン整数列大辞典の数列 A001653、オンライン整数列大辞典の数列 A053755を参照。
- フェルマー系列はオンライン整数列大辞典の数列 A114336を参照。
原始ピタゴラス数の変換式
全ての原始ピタゴラス数 t(a, b, c)(t は転置を表す)は、t(3, 4, 5) に次の行列 U, A, D を左から有限回掛ける(作用させる)ことで、一意に得られることが、前節の「添加」より分かる:
- 操作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 1 / (2 − 14/9) = 9/4
- 14/9 1 / (9/4 − 2) = 4/1
- 14/9 4/1 − 2 = 2/1
となり、e := 2/1 とおくと
- 14/9 = UAD(e)
と分かる。
(例2)(m, n) = (11, 8)
- 11/8 1 / (2 − 11/8) = 8/5
- 11/8 1 / (2 − 8/5) = 5/2
- 11/8 1 / (5/2 − 2) = 2/1
となり、
- 11/8 = UUA(e)
と分かる。
(例3)(m, n) = (28, 13)
- 28/13 1 / (28/13 − 2) = 13/2
- 28/13 13/2 − 2 = 9/2
- 28/13 9/2 − 2 = 5/2
- 28/13 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世紀にフェルマー[6]に着目されるまでヨーロッパ数学界では少なくとも周知はされていなかったようである。直角をはさむ2辺の差が1である系列は古代バビロニアでは知られていたようであることがYBC 7289から窺われる。
操作U・D・A により「原始ピタゴラス数全体は重複なく三分木をなす」ことが、1963年にオランダのバーニング (F.J.M.Barning)[7]、1970年にアメリカのホール (A.Hall)[8]、また1993年頃[9]に日本の亀井喜久男によって独立に発見・発表された[4]。ただし、バーニング、ホール、亀井の何れの発表についても、各操作はどの表現行列に該当するか?という逆問題が未解決だった。実際に細矢治夫は2012年の著書で「バーニングとホールの(中略)理論の大きな泣き所は, 任意の二つの規約ピタゴラスの三角形を選んだときに, その両者を結ぶU, D, A の組合せが存在するかの判定, またもし存在するとしてもその組合せを知る簡単な手だてがないことである」と述べている[4]。
