X



トップページ数学
330コメント213KB
ピタゴラス数をなんと 〜荒らされたので立て直しました〜 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001旭=1000垢版2016/11/02(水) 07:53:23.97ID:kmhD7zB7
自分で作ったプログラムでa^2+b^2のaが35万以上計算しました。
100万以上に向けて頑張りたいと思いますので
応援お願いいたします。
プログラムにバグがあった場合抜けている数があると思うので
その点には留意いたしたいと思う次第であります。
0159132人目の素数さん垢版2018/07/28(土) 13:17:36.82ID:qqQucTqD
失敬。Faray は人名のほうだったか。「なんちゃらかんちゃら配列」
かと思っていた。
私は原始ピタゴラス数のことを、Babylonian Rectangle と呼んで、
そういう名前のオブジェクトを定義し、
Java の ArrayList に突っ込む、という形でプログラムを
書いていたので「この配列はなんだ?」とか考えこんでいた。(-_-!)
0160132人目の素数さん垢版2018/07/28(土) 13:28:55.01ID:qqQucTqD
WikiPedia によると、ファレイ数列は連分数と関連があると
書いてある。プリンプトン322を解読していたときに、
「古代バビロニア人は 180 以下の(分子分母がともに
基数の)既約分数をどうやって網羅したんだろう、と
首を捻っていた(もちろん「根性で」という可能性も
高いんだが)のだが、黄金数 φ を連分数表示すると
[1; 1, 1, 1, 1, …] で1+√2が[2; 2, 2, 2, 2, …]
というのを見ると、「ワシらは三千年以上も前の
連中の後追いをしていたのか?」と気弱になってくる。orz
0161132人目の素数さん垢版2018/07/28(土) 14:20:11.82ID:En721ByW
自分でよく使っている環境は別にあります。
そこで作成したものを、codepadに移植する際に、クラシカルなものになってしまっているのだと思います。
以前、別の言語で実行させたとき、原因不明のエラーが出て、対処に困りました。
そのとき、このスタイルで実行させたところ、うまく走ってくれたので、
ここに投稿するときにはこのスタイルを取ることにしてます。
もし、字下げや、関数の呼び出しのようなスタイルに対するものでしたら、染みついたものですから、しょうが無いですね。

それと、私は低級側好みます。
例えば、next_permutationという関数があります。次々に新しい順列を返してくれるものです。
使う側としては便利なのですが、どのようなアルゴリズムでやっているのか気になって調べたら、
「無駄」があることが判りました。数度だけ利用するなら、全然問題にならないレベルですが、
全ての順列を発生させる場合には、無駄な処理を繰り返すことになっています。
ということで、順列を発生させるような場合も、自分で発生させています。
このように、内部で何をやっているかよく分からず、かつ、自分で作成できるような場合は
自作することが多いです。私にはC++が馴染んていると思うのですが、この辺に理由があるんだと思います。

「Farey分数」は、wikiには「ファレイ数列」として載っていますね。確かに人名由来の名称のようです。
>>139では、分数と番号の変換が美しくないと書きましたが、ファレイ分数を、「値」を実態とするところの有理数
と考えるのではなく、「範囲」に対する名称と認識することで、変換を低コストで実現可能であることに気づき、
今回、実際にコード化を試しました。昨夜のプログラムの出力に、「範囲」を載せている所以です。
0162132人目の素数さん垢版2018/07/28(土) 23:59:12.30ID:qqQucTqD
>>161
低級レベルの記述をしようと思うんなら、確かに C(あるいはC++)は
よい選択だと思う。おれも元々は数値計算屋で、大規模問題を
貧弱なコンピュータ環境で解く、というのに血道を上げていたので、
そのあたりの感性はよく理解できる。

初等関数の数値計算を行うときに、“CORDIC”という手法があって、
ほぼ乗算程度の計算量で初等関数が最後の桁まで求まる
(必要なのは、 arctan() の数表だけ)んだ。
そういうのが好きだったら、一松 信先生の『初等関数の数値計算』とか
面白いと思うぞ?
あとは森口繁一先生の『数値計算夜話』とか、一松先生の『教室に電卓を!』とか。

おれはプロとしてチーム開発を長年してきたので、「速くする前にわかりやすくしよう」
という観点から、C から Java へ移行したという経緯がある。C のような低レベル
言語だと、「見立て」というか、「こういうことを言いたいんですよ」というのが、
(実行速度との絡みで)伝えにくいという意識がある。
昨今は CPU は速いしメモリ空間もでかいので、「こういうことを
言いたいんですよ」というのがざっくり説明しやすい Java に興味を
持っている。
それに、Java はけっこう C の流儀を引きずっているので、
年寄りとしては、なんとなく安心するところがある。
0164132人目の素数さん垢版2018/07/29(日) 00:10:01.68ID:sLBYc3Xd
>>161
> もし、字下げや、関数の呼び出しのようなスタイルに対するものでしたら、
> 染みついたものですから、しょうが無いですね。
いや、インデントに関しては、個人の趣味の問題なので「好きにしろ」
という立場なんだが、「変数を頭のところで宣言する」というのが
わりと古いスタイルの C に影響されているかもな、と思った。
CPU のレジスタ構成とかを考えると、昔は高速化に貢献していた
部分はあるのだが、昨今のコンパイラの最適化は信用していいと
思う(不安だったら、C のコンパイラはアセンブラのソースを
吐くので、それを読んでみたら安心できると思う)ので、
変数のスコープを明確に示して、人間側のエラーを減らしたほうが、
(あくまで職業的なプログラマの立場から言うのであって、個人が
書くプログラムに関しては、ぶっちゃけ趣味の問題でしかないが)
たぶん長期的にみると効率がいいと思う。
プログラマは「三日前の自分は他人だ」と云うしな。
0165132人目の素数さん垢版2018/07/29(日) 11:43:29.27ID:sLBYc3Xd
あと、これは数学板で言うこっちゃないと思うが
(つーても FORTRAN は「数式変換(FORmula TRAMsratpr)」の
略だし、「ALGOL」は、アルゴリズム記述用の言語として定義された
経緯はあるのだが)、
変数名として i, j, k を使うのは、i, j, k, l, m, n(たぶん integer から
natural までだと思う)で始まる変数は、定義されていなくても整数型の
変数だ、という FORTRAN 60 の処理系依存のルールが起源だと思う。
昨今は「局所変数は、使うスコープの中で定義する」というスタイルが
一般的になっていると思う。
このあたり、哲学(論理学)における、自由変項(グローバル変数)と
束縛変項(局所変数。関数引数と、関数内の作業領域が、この代表)に
対応しているので、興味があったらこれらの言葉をキーワードとして
関連図書を漁ってみると楽しいかもしれない。
0166132人目の素数さん垢版2018/07/29(日) 13:57:42.94ID:sLBYc3Xd
>>161
いきなり思い出したので書いておくと、
大田区の区議会選挙の話でシャープレイ=シュービック指数を
計算するときに、すべての組合せを生成する(もうちょっと
効率のいい計算法があるはずなんだが、考えるより動かしたほうが
早そうだった)ルーチンが必要になり、その昔書いた「動的ちり集め」の
ロジックをひねくって実装した記憶があった。
ところが、Java には明示的なポインタがない(「参照」は実質的には
ポインタなんだが)ので、swap ができなくてギブアップした経験がある。
そんなわけで、「とりあえず、整列やらなんやらはライブラリに任せて、
中身に関しては(よっぽど遅くなかったら)考えないことにする」と
居直った。
だから、昔の関数電卓を使うと、初等計算の計算より階乗の計算のほうが
あからさまに遅いのを見ると、なんとなく諦念が浮かんでくる。
0168132人目の素数さん垢版2018/07/29(日) 23:55:46.66ID:U3PTDiLz
色々と面白いお話ありがとうございます。本論からは外れてしまいますが、少しコメント
させてもらうと、FORTRAN、暗黙の宣言文ときたら、私はルンゲクッタ法を思い出してしまいます。
表記の異なる4つの式を、暗黙の宣言文を利用(悪用)して、1ステップの式で表し、
こっそりループに閉じ込めました。そして初見の人に、「これ、ルンゲクッタ法使ってるの?」と
言わしめる悪戯をしていたのを思い出します。

投票力指数については初めて目にしました。順列生成は、覆面算とかのパズル系でよくつかいますが、
このような実用的なところでも利用されていたんですね。勉強になりました。

>> プログラマは「三日前の自分は他人だ」と云うしな。
呂蒙のお話かと思ったけど、「自分が書いたはずの三日前のコードの意図が分からない」的なことですよね。
0169132人目の素数さん垢版2018/07/30(月) 08:19:01.00ID:dQ07oWjc
>>168
> そして初見の人に、「これ、ルンゲクッタ法使ってるの?」と
> 言わしめる悪戯をしていたのを思い出します。
N88-BASIC には GOTO と GOSUB というコマンドがあって、
飛び先が両方ともラベルだった。
で、「八人の女王」のプログラムで GOTO と GOSUB と RETURN を
ごっちゃに使って「追っているとだんだん意味不明になって頭を抱える」
というのを書いたことがある。
0170132人目の素数さん垢版2018/07/30(月) 12:23:33.15ID:dQ07oWjc
>>168
呂蒙って知らなかった。『男子、三日会わざれば刮目(かつもく)して見よ』
みたいな話じゃなくて、「喉元過ぎれば熱さを忘れる」とか「ニワトリは
三歩歩くと忘れる」程度の話。

ちなみに、ナメクジは思い出した瞬間に冷やすと忘れる、という話が
あるので、「トラウマとかがあった場合、思い出した瞬間に冷やしたら
どうだろう?」みたいな話が昔あった。
0172132人目の素数さん垢版2018/08/01(水) 11:31:52.22ID:vpyCn2wC
なんかこのスレも決着がついちゃった感があるので、
残りを埋める意味で Java のソースでも貼っとくか。
「原始ピタゴラス数」という名前ではなく、
「縦横と対角線の長さが自然数で表される長方形」を
「バビロニア長方形」と呼んでいる。
クラス定義と、縦横の比のコンパレータ。コンテナに突っ込んで
ソートすると、縦横比で整列される。
0173132人目の素数さん垢版2018/08/01(水) 11:34:06.40ID:vpyCn2wC
public class BabylonianRectangle {

private int p;
private int q;

private int m;
private int n;

private int odd_side; // 奇数辺
private int even_side; // 偶数辺

private int short_side; // 短辺
private int long_side; // 長辺

private int diagonal; // 対角線
private int magnitude; // 倍率
private double aspect_ratio; // 形状比
0174132人目の素数さん垢版2018/08/01(水) 11:34:46.13ID:vpyCn2wC
/*
* コンストラクタ
* @param a
* @param b
*/
public BabylonianRectangle( int a, int b ) {

this.magnitude = Secretary.gcf(a, b);
a /= magnitude;
b /= magnitude;

if ((a % 2 == 1) && ( b % 2 == 1)) {
this.m = a;
this.n = b;

this.p = (n - m) / 2;
this.q = (n + m) / 2;

/*
* Euclid の公式
* {(q^2 - p^2) / 2, p * q, (p^2 + q^2) / 2)}
* ただし、p, q は互いに素であり、ともに奇数.。
*/
this.even_side = (( this.n * this.n ) - ( this.m * this.m )) / 2;
this.odd_side = this.m * this.n;
this.diagonal = (( this.m * this.m ) + ( this.n * this.n )) / 2;
} else {
this.p = a;
this.q = b;

this.m = q - p;
this.n = q + p;

/*
* Brahmagupta の公式
* {n^2 - m^2, 2 * m * n, m^2 + n^2}
* ただし、m, n は 0 < m < n かつ
* 互いに素であり、偶奇が異なる.
*
*/
this.odd_side = (q * q) - (p * p);
this.even_side = 2 * p * q;
this.diagonal = (p * p) + (q * q);
}

// 短辺と長辺の長さを求める。
this.short_side = (odd_side < even_side) ? odd_side : even_side;
this.long_side = (odd_side < even_side) ? even_side : odd_side;
this.aspect_ratio = (double)long_side / (double)short_side;
}
0175132人目の素数さん垢版2018/08/01(水) 11:35:45.35ID:vpyCn2wC
/*
* getter. 原則的に setter はない.
*/
// Euclid の公式
public int getM() {
return this.m;
}

public int getN() {
return this.n;
}

// Brahmagupta の公式
public int getP() {
return this.p;
}

public int getQ() {
return this.q;
}

// 奇数辺の長さ
public int getOddLeg() {
return this.odd_side;
}

// 偶数辺の長さ
public int getEvenLeg() {
return this.even_side;
}

// 短辺の長さ
public int getShortSide() {
return this.short_side;
}

// 長辺の長さ
public int getLongSide() {
return this.long_side;
}

// 対角線の長さ
public int getDiagonal() {
return this.diagonal;
}

// 形状比
public double getAspectRatio() {
return this.aspect_ratio;
}
0176132人目の素数さん垢版2018/08/01(水) 11:36:38.56ID:vpyCn2wC
/*
* 扱いが かなり面倒臭い. setter が必要.
*/
public int getMagniTude() {
return this.magnitude;
}

@Override
public String toString() {
int x = this.getShortSide();
int y = this.getLongSide();
int z = this.getDiagonal();
float sort_key = (float)( z * z )/(float)( y * y );
String ret =
"{" +
Integer.toString(this.getShortSide()) + ", " +
Integer.toString(this.getLongSide()) + ", " +
Integer.toString(this.getDiagonal()) + "}:" +
sort_key;
return ret;
}

public String toString2() {
String ret =
"( p = " + this.getP() + ", q = " + this.getQ() + "):" +
"( m = " + this.getM() + ", n = " + this.getN() + "):" +
"{" +

Integer.toString(this.getShortSide()) + ", " +
Integer.toString(this.getLongSide()) + ", " +
Integer.toString(this.getDiagonal()) + "}:" +
this.getAspectRatio();
return ret;
}
}
0177132人目の素数さん垢版2018/08/01(水) 11:37:42.11ID:vpyCn2wC
import java.util.Comparator;
public class BabylonianRectangleComparator implements Comparator<BabylonianRectangle> {
public int compare( BabylonianRectangle a, BabylonianRectangle b ) {
if (a.getAspectRatio() == b.getAspectRatio()) return 0;
if (a.getAspectRatio() > b.getAspectRatio()) return 1;
return -1;
}
}
0179132人目の素数さん垢版2018/08/01(水) 11:48:58.42ID:vpyCn2wC
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;

import toybox.Abaci;

public class P322_05 {
// static final double phi = 1.732d;;
static final double phi = (1.0d + Math.sqrt(5.0d)) / 2.0d;
static final int UPPER_LIMIT = 180;
public static void main( String [] args ) {
_main();
}

private static void _main() {
ArrayList <BabylonianRectangle> BRs = new ArrayList<BabylonianRectangle>();

byEuclid(BRs);
// byBrahmagupta(BRs);

Collections.sort(BRs, new BabylonianRectangleComparator());

print(BRs);
print2(BRs);

}

// ユークリッドの公式
static void byEuclid(ArrayList <BabylonianRectangle> brs) {
for (int m = 1; m < UPPER_LIMIT; m += 2) {
for (int n = m + 2; n <= UPPER_LIMIT; n += 2) {
if (Secretary.gcf(m, n) != 1) continue;
BabylonianRectangle br = new BabylonianRectangle(m, n);
if ((1.0d < br.getAspectRatio()) && (br.getAspectRatio() < phi)) {
if (Secretary.isHarmonic(br.getLongSide())) {
brs.add(br);
}
}
}
}
}
0180132人目の素数さん垢版2018/08/01(水) 11:49:40.90ID:vpyCn2wC
// ブラーマグプタの公式
static void byBrahmagupta(ArrayList <BabylonianRectangle> brs) {
for (int p = 1; p < UPPER_LIMIT; p += 1) {
for (int q = p + 1; q <= UPPER_LIMIT; q += 2) {
if (Secretary.gcf(p, q) != 1) continue;
/*
if (!Secretary.isHarmonic(p)) continue;
if (!Secretary.isHarmonic(q)) continue;
*/
BabylonianRectangle br = new BabylonianRectangle(p, q);
if ((1.0d < br.getAspectRatio()) && (br.getAspectRatio() < phi)) {
if (Secretary.isHarmonic(br.getLongSide())) {
brs.add(br);
}
}
}
}
}

static void print( ArrayList <BabylonianRectangle> BRs ) {
int n = 0;
Iterator <BabylonianRectangle> iter = BRs.iterator();
while ( iter.hasNext()) {
BabylonianRectangle br = iter.next();
System.out.println(++n + " : " + br.toString());
System.out.println( Abaci.regulerNumberToString(br.getLongSide()));
}
}

static void print2( ArrayList <BabylonianRectangle> BRs ) {
int size = BRs.size();
if (size < 1) return;
int index = 0;
BabylonianRectangle work = BRs.get(index);
float arx = (float) work.getAspectRatio();
for (index = 1; index < size; index += 1) {
work = BRs.get(index);
float ary = (float) work.getAspectRatio();
System.out.println(index + ":" + (ary - arx) * 100);
arx = ary;
}
}
}
0181132人目の素数さん垢版2018/08/01(水) 11:57:16.15ID:vpyCn2wC
いくらか足らんところもあるけど、
なんかレスがついたら返事する予定。
でもって適当に age てみる。
0182132人目の素数さん垢版2018/08/01(水) 12:03:47.33ID:vpyCn2wC
参考までに、プリンプトン322に書かれている値を載せておこう。
夏休みの自由研究的なナニカだと思ってくれ。

番号 : {短辺, 長辺, 斜辺} : 六十進表記の斜辺の平方と長辺平方の比(同、十進表記)
1 : {119, (120,) 169} : 01;59:00:15(≒ 1.9834027)
2 : {3367, (3456,) 4825} : 01;56:56:58:14:50:06:15(≒ 1.9491584)
3 : {4601, (4800,) 6649} : 01;55:07:41:15:33:45(≒ 1.9188021)
4 : {12709, (13500,) 18541} : 01;53:10:29:32:52:16(≒ 1.8862479)
5 : {65, (72,) 97} : 01;48:54:01:40(≒ 1.8150077)
6 : {319, (360,) 481} : 01;47:06:41:40(≒ 1.7851928)
7 : {2291, (2700,) 3541} : 01;43:11:56:28:26:40(≒ 1.7199837)
8 : {799, (960,) 1249} : 01;41:33:45:14:03:45(≒ 1.6927094)
9 : {481, (600,) 769} : 01;38:33:36:36(≒ 1.6426694)
10 : {4961, (6480,) 8161} : 01;35:10:02:28:27:24:26:40(≒ 1.5861225)
11 : {45, (60,) 75} : 01;33:45(≒ 1.5625)
12 : {1679, (2400,) 2929} : 01;29:21:54:02:15(≒ 1.4894168)
13 : {161, (240,) 289} : 01;27:00:03:45(≒ 1.4500173)
14 : {1771, (2700,) 3229} : 01;25:48:51:35:06:40(≒ 1.4302388)
15 : {56, (90,) 106} : 01;23:13:46:40(≒ 1.3871605)
0183132人目の素数さん垢版2018/08/04(土) 13:06:41.46ID:Bw0Mcxrs
>>182
120 / 119 = 1.008(1)
90 / 56 = 1.607(15)
φ = 1.618
なんで、1 と 黄金比の間だって気がつかなかったのか、
そっちの方が不思議に思うんだがなぁ。
0184132人目の素数さん垢版2018/08/05(日) 19:42:38.81ID:+Do+cqXV
前にも書いたけど、
「11 番と 15 番が、なぜ原始ピタゴラス数ではないのか?」
っちゅーあたりを考えると、古代バビロニア人の
「美学」みたいなものに行き当たるので、
けっこう面白い。
0185132人目の素数さん垢版2018/09/10(月) 16:52:02.82ID:xymEJxxp
…… というような話を、きょう
室井和男著/中村滋コーディネートの
『シュメール人の数学 ― 粘土板に刻まれた古の数学』
(共立出版。スマート・セレクション)の感想として
送っておいた。
反応が楽しみなんだが、結果は どうだろう。
0186132人目の素数さん垢版2018/09/11(火) 01:39:42.12ID:5wZvlX50
読めないよ

https://m.facebook.com/masaoki.iwasaki.9
https://twitter.com/mas20285
https://twitter.com/keepmathtop
https://twitter.com/kyuuchan_
https://twitter.com/xPuGPq8Tn9GWCJb

https://i.imgur.com/EuqD4Nf.png
https://i.imgur.com/AcRxZW4.jpg
https://i.imgur.com/4Dk16V9.jpg
https://i.imgur.com/JHemyAu.jpg
https://i.imgur.com/L463soq.jpg
https://i.imgur.com/jpf8lOd.jpg
https://twitter.com/5chan_nel (5ch newer account)
0187132人目の素数さん垢版2018/09/14(金) 09:51:17.02ID:C0b4NuTc
思考停止の総当たり

#include<stdio.h>
#include<stdlib.h>

int pit(int A,int B, int C){
int a,b,c; int pit=0;
for(a=1;a<=A;a++){
for(b=a;b<=B;b++){
for(c=b;c<=C;c++){
if((a<b) && (a*a+b*b==c*c)) {
++pit;
printf("%d : %d * %d + %d * %d = %d * %d\n",pit,a,a,b,b,c,c);
}
}
}
}
return 0;
}

int main( int argc, char *argv[] ){
int a,b,c;
a = atoi(argv[1]);
b = atoi(argv[2]);
c = atoi(argv[3]);
pit(a,b,c);
return 0;
}
0188M.B.垢版2018/09/16(日) 17:19:57.16ID:V1qrmnVd
>>187
おれも同じことをやったが、
演算子 ++ は、「構造体とかのサイズのあるものに
対するポインタに対して、sizeof() 分だけインクリメント
するのが本来の使い方」なんで、ポインタじゃない
整数値に対しては ++ じゃなくて +=1 を使うのが
礼儀正しい C プログラミングのありかただと思われ。
0189M.B.垢版2018/09/16(日) 17:27:29.21ID:V1qrmnVd
>>187
あと、これはまったく余計な話だが、
main() の戻り値は、昨今は void に
しとくのが流行らしい。
どうせレジスタに残ってる値を使うか使わないかの
話なんで、「どうでもいいや」っちゅー話はあるんだけどね。
0190132人目の素数さん垢版2018/09/18(火) 08:20:24.71ID:vcQQXUVH
プリンプトン322が45° から30° までの表だとすると、

{175, 288, 337}:1.369225

が入って 16 行になんないとおかしいと思うんだが、
どうだろう。
288 / 175 < √3 = 1/tan(30°)
だよなぁ?
0191132人目の素数さん垢版2018/09/20(木) 17:45:50.60ID:+3do99E+
すまん。別スレの話題なんだが、そっちの方では
スレ違いなんで、「ピタゴラス数つながり」で、
このスレの残りを有効利用させてもらいたい。
m(_ _)m

まず、「ユークリッドの公式」(つーても、ユークリッドが
生まれる千五百年前には発見されていたのだが)という
ものがある。

【ユークリッドによる、原始ピタゴラス数の公式】
「互いに素な奇数 p, q (ただし、0 < p < q)から、一意に
原始ピタゴラス数を求める式がある。すなわち、
{X, Y, Z} = {(q^2 - p^2}/2, p×q, p^2 + q^2}
である。」
0192132人目の素数さん垢版2018/09/20(木) 17:54:26.29ID:+3do99E+
つぎに、Barning = Hall = 亀井の定理について説明する。

互いに素な奇数 {p, q} (ただし、0 < p < q)があったとき、
以下の三つの奇数の組 は、互いに素であり、すべて異なる。
1){p, q + 2p}
2){q, p + 2q}
3){2q - p, q}

【Barning = Hall = 亀井の定理】
すべての原始ピタゴラス数は、三分木によって、一意に表される。
0193132人目の素数さん垢版2018/09/20(木) 18:04:03.04ID:+3do99E+
【Barning = Hall = 亀井の定理の逆問題】
任意の原始ピタゴラス数から、最小の原始ピタゴラス数に
至る経路を求めるアルゴリズムを示せ。

【解】
前期(1)(2)(3)は、逆操作として、
0 < p < q のとき、
{p', q'} = {p, |q - 2q|} として表される。

ただし、p = 1, q = 3 のとき、
p' = q' = 1 となり、「0 < p < q 」の条件を満たさないため、
逆操作は行えない。このとき、
f(1, 3) = {3, 4, 5}
であり、Barning = Hall = 亀井の定理の示すところと
一致する。
0195132人目の素数さん垢版2018/09/20(木) 20:56:47.23ID:a1/nOQ/g
この分野はよく知らないが、HallはMath GazzetteのClassroom Notesに
Barningはオランダ語のレポートと、主流の結果でもない
最近の論文見ると
http://nntdm.net/volume-18-2012/number-1/49-57/
みたいなのに掲載されてる。

あとは日本国内の研究者でBarning-Hallに興味持っている研究者を
調べて、そこの欧文紀要があれば掲載を頼む

英語で数学論文を書いた経験があまりないのなら
誰かに論文見てもらって直してもらわないと、論文の体裁をなしてないという理由で
rejectくらっても仕方ないよ
へぼい国内紀要でもそういう論文は結構投稿されていて門前払いを食らう
論文の校正まで編集部やrefereeはやってられないからね
0196Mr.Moto垢版2018/09/20(木) 21:01:23.09ID:+3do99E+
>>194
ありがとう。
「やべぇ! 後追いだったか?」と思って ちょっとビビったけど、
このレベルだったら細矢先生のほうが先に行ってる。
つーか出たのが二〇一四年の十月だったら、おれらがもう
逆問題を解いた後だ。
やっぱ、行列式使って解こうとすると、逆行列を考えたところで
行き詰まっちゃうんだろうな。おれらは そっちへ行ってないから、
どこで行き詰まるのか自体がよく解らんけど。

ついでに指摘しておくと、結城浩さんや紹介してくれた論文で
使ってる公式(こっちの方が有名だ)は、インドのプラーマグプタ
(0の発見者として有名)が書き残してるもので、
時代的にはユークリッドの式よりも何百年か遅いはず。
>>191 以降の議論は、そっちの式を使っても、同じ結論に
なる。p, q と m, n は、たしか和差の関係になるはず。
おれがプラーマグプタの式を使わなかった理由は、数式を
図で描こうと思うとダサいからだ(笑)
ユークリッドの式は、長方形の中に三角形一つと長方形
一つで描ける(なんせ、古代バビロニアには数式がねぇ!)
ので、壁に貼っておきたくなるようなシロモノだ。
0197132人目の素数さん垢版2018/09/20(木) 21:05:38.44ID:M6nVhqxS
(1)『すべての原始ピタゴラス数は、{3, 4, 5} に
   U/D/A という三次の行列を掛けることで、一意に表される』

という性質を既知とする。
e=(3 4 5)とする(横表記だけど縦ベクトルのつもり)。

v=(x y z)を原始ピタゴラス数とする。
(1)によれば、eにU/A/Dを掛け算していくことでvが得られるので、
U^{-1}v, A^{-1}v, D^{-1}v のうち、原始ピタゴラス数が少なくとも1つはある。
0198Mr.Moto垢版2018/09/20(木) 21:07:22.64ID:+3do99E+
>>195
おぉ、ありがとう。
とりあえず敷居が高いというのは理解したので、
小冊子を自費で出版して(マンガ同人誌と
おんなじようなモンだし)、心当たりに
片っ端から配って回る、とかいうのが
いちばん手っ取り早いかもしらんな。
0199132人目の素数さん垢版2018/09/20(木) 21:07:26.78ID:M6nVhqxS
ここで、U^{-1}vとA^{-1}vがともに原始ピタゴラス数になることはない。
なぜなら、もしこの2つが原始ピタゴラス数なら、
U^{-1}vとA^{-1}vそれぞれに(1)を適用して、

eにU/A/Dを掛け算していくことでU^{-1}vが得られる
eにU/A/Dを掛け算していくことでA^{-1}vが得られる

ので、

eにU/A/Dを掛け算してU^{-1}vを得たのちに、さらにUを掛ければ v が得られる
eにU/A/Dを掛け算してA^{-1}vを得たのちに、さらにAを掛ければ v が得られる

となり、eからvへの経路が2つあることになって、(1)の一意性に矛盾する。
0200132人目の素数さん垢版2018/09/20(木) 21:09:17.24ID:M6nVhqxS
同じようにして、U^{-1}vとD^{-1}vがともに原始ピタゴラス数になることはないし、
A^{-1}vとD^{-1}vがともに原始ピタゴラス数になることはない。
要するに、U^{-1}v, A^{-1}v, D^{-1}v のうち、原始ピタゴラス数は1つしかない。
よって、以下のアルゴリズムで、vからeへのルートが出力できる。

v=(x y z)を原始ピタゴラス数とする。U^{-1}v, A^{-1}v, D^{-1}v を計算する。
この中に、原始ピタゴラス数がちょうど1つだけあるので、それに対して同じ作業を繰り返す。
有限回の作業でeに辿り着くので、ここまでの経路を出力すればよい。
0201132人目の素数さん垢版2018/09/20(木) 21:11:40.87ID:M6nVhqxS
eに合計でm個のU/A/Dを掛け算してvに辿り着くなら、>>200のアルゴリズムでは
行列の積の計算が3m回必要になる。また、(x y z)が原始ピタゴラス数であるかどうかの判定には、
「x,y,zが負になってないか」「x,y,zに共通の因数がないか」を判定しなければならない。
前者は簡単に判定できる。後者はユークリッドの互除法で判定すれば高速に終わる。
(あるいは、U^{-1},A^{-1},D^{-1}の性質上、前者しか起きないのかも?)

全体としては、このようなアルゴリズムだけでも普通に速いんじゃないかという気がする。
たぶん、この分野ではもっと凄まじいアルゴリズムが希望されているのだろう。
0202132人目の素数さん垢版2018/09/20(木) 21:14:07.69ID:M6nVhqxS
次に、>>191-193のやり方だが、記述を端折りすぎていてよく分からない。
エスパーすると、たぶんこういうことを言いたいのだと思う。

v=(x y z)を原始ピタゴラス数とする。
x=(t^2 - s^2)/2, y=s×t, z=s^2 + t^2 となるような、
互いに素な奇数0<s<tを求める。いつでもこのようにすると、
原始ピタゴラス数は「互いに素な奇数0<s<t」に対応することになる。
すると、>>191-193によれば、U^{-1}v, A^{-1}v, D^{-1}v を計算することは、
互いに素な奇数0<s<tを用いて

(1) 0<s<t−2s
(2) 0<t−2s<s
(3) 0<2s−t<s

を計算することと同じことになるらしい(この順番で対応しているかは知らないが)。
0203132人目の素数さん垢版2018/09/20(木) 21:15:38.92ID:M6nVhqxS
sを基準にして書き換えると、(1),(2),(3)は

s∈(0,t/3)
s∈(t/3,t/2)
s∈(t/2,t)

と同じになる。最初に与えられているのは0<s<tつまりs∈(0,t)だから、
上の3つのうち2つ以上が同時に起きることはない。また、3つそれぞれが
U^{-1}v, A^{-1}v, D^{-1}v のどれかに対応している(らしい)。
0204132人目の素数さん垢版2018/09/20(木) 21:17:21.38ID:M6nVhqxS
よって、>>191-193のアルゴリズムは、たぶん次のようになるのだろう。

v=(x y z)を原始ピタゴラス数とする。
x=(t^2 - s^2)/2, y=s×t, z=s^2 + t^2 となるような、
互いに素な奇数0<s<tを求めておく。このとき、

(1) 0<s<t−2s
(2) 0<t−2s<s
(3) 0<2s−t<s

のうち2つ以上が成り立つことはないので、成り立つものは高々1つである。
もし成り立つものがあったら、それを 0<s'<t' として、今までの操作を繰り返す。
(1)〜(3)のどれもが成り立たなくなったら、その時点で e=(3 4 5) に対応しているので、
そこでやめる。ここまでの過程で、(1)〜(3)のうちどれが成り立ってきたのかという履歴が
U^{-1},A^{-1},D^{-1}の経路にきれいに対応している(らしい)ので、この履歴を出力すればいい。

これでいいのかは知らないが、もしこれでいいなら、
>>191-193のアルゴリズムはとても速いし、面白いと思う。
0205132人目の素数さん垢版2018/09/20(木) 21:24:23.94ID:M6nVhqxS
で、速いし面白いことは大体わかったが、

・ この程度なら、この界隈の人がとっくに見つけてたのではないか?
・ たとえば、>>194の論文で全く同じことやってないか?

という疑問点が生じる。
0206132人目の素数さん垢版2018/09/20(木) 22:05:15.23ID:a1/nOQ/g
>>196
方法論として優れているのだろうと思うが
逆問題自体が解決されているとしたら、自分たちの手法の
どこが優れているか明確に書かないといけない
学術論文を書く基本的な訓練を受けてないように感じる

>>198
普通ならarXivに載せておくと良いでしょう
後から誰かとかち合っても記録に残る
0208132人目の素数さん垢版2018/09/21(金) 03:46:38.82ID:mhAC8MdV
次は、「番号」、「原始ピタゴラス数」、「p,q値」を列挙するプログラムです。
http://codepad.org/UhYptqy2

「番号」というのは、私が、原始ピタゴラス数の整理に便利だと考え、勝手につけた通し番号です。
>>119でアップした、http://codepad.org/VKGibeHo にちょっと手を加えただけのものです)

この「番号」は、三分木構造のどの位置にあるのかを知るのに、便利な指標となっています。
番号に1を加え、3で割って切り捨てすれば、親の番号が判ります。
番号に1を加え、3で割った余りを求めれば、子の枝順位、つまり、長男(=0)、次男(=1)、三男(=2)を判定できます。

簡単に説明すると、番号1が始祖です。その子供が、2,3,4で、2の子供が5,6,7、3の子供が8,9,10、
4の子供が11,12,13、5の子供が、14,15,16、...となっています。
1が第一世代、2,3,4が第二世代、5〜13が第三世代で、14〜40が第4世代、、、(3^(n-1)+1)/2〜(3^n-1)/2 が第n世代 です。

簡単な構造なので、このような樹形図を初めて扱う方でも、各原始ピタゴラス数が、三分木構造のどこに配置されているか
簡単に図示できるでしょう。
この原始ピタゴラス数樹形図を、(p,q)の視点で眺めると、親を(p,q)としたとき、(p,2p+q)が長男、(q,2q-p)が次男、
(q,2q+p)が三男に相当しているようですね。
0209132人目の素数さん垢版2018/09/21(金) 06:24:08.06ID:mhAC8MdV
親のpq値(p',q')から、三人の子のpq値(p,q)を求める方法は、
(p,q)=(p',2p'+q'),(q',-p'+2q'),(q',p'+2q')
それぞれ、長男、次男、三男に相当

子供のpq値(p,q)から、親のpq値(p',q')を求める方法は
(p',q') =(p,q-2p)     (3p<q の時;長男→親の変換に相当)
     =(2p-q,p)     (p<q<2p の時;次男→親の変換に相当)
     =(-2p+q,p)    (2p<q<3p の時;三男→親の変換に相当)

ですね。 >>193 では
>> {p', q'} = {p, |q - 2q|} として表される。
のようにされていますが、この場合、変換時、p',q'の大小をチェックして、
小さい方をp'、大きい方をq'としなければなりません。

しかし、変換式をここで書いたように固定すると、
p<q ⇔ p'<q'
が成立しますよ。
0210Mr.Moto垢版2018/09/21(金) 06:30:10.45ID:wZU0ZxS/
>>202 >>203 >>204
問題の本質を理解してくださってありがたいが、
そんなに難しいことは言ってないんだ (^_^!)
二つの互いに素な奇数 p, q (0 < p < q)があるとすると、
そこから原始ピタゴラス数 { x, y, z } が求まる。x と y が
決まれば z も決まるので、本質は x, y。
で、奇数のほうが pq、偶数のほうが (q^2 - p^2) /2 だから、
{x, y} から p, q が求まる。
ここで、p × q の長方形を考えて、そこから p × p の正方形を
二個取り去る(面積が 1 になったらそこで終わり。マイナスに
なった場合は「面積の絶対値」を取る)と、p' と q' が出て、
そこから原始ピタゴラス数を計算すると、それが「親」にあたる
原始ピタゴラス数になる。
ピタゴラス数を、「直角三角形の三辺」と考えるより、
「縦横と対角線の長さが自然数の比で表される長方形」
と考えたほうが素朴だろう(だいたい、日常で直角三角形と
いうのはほとんど見ないし)、というのが出発点。
0211Mr.Moto垢版2018/09/21(金) 06:31:39.87ID:wZU0ZxS/
あとは、「互除法と連分数は、同じ概念の二つの側面」
であって、1 + √2 = [2; 2, 2, 2, 2, …]、
φ = [1; 1, 1, 1, 1, …] なんで、
プリンプトン322が計算しているのはこのあたり、
みたいな話につながってく。
0212Mr.Moto垢版2018/09/21(金) 06:48:39.23ID:wZU0ZxS/
>>207
見てますよー。
連分数にしろ図的解法にしろ、あまり一般的な
手法とはいえないので、現在広く使われている
基本の手法とか考え方とかとの相性がよいと
思います。数学をちゃんとやってる人に
してみたら、「こっちの方がわかりやすい」
と思うんじゃないかな。
0213Mr.Moto垢版2018/09/21(金) 07:49:15.05ID:wZU0ZxS/
>>205
じつは、そのあたりはあんまり気にしてないんだ (^_^)
もともと、本筋は「プリンプトン322の解読」のほうなので、
「ひょっとしたら、三千八百年くらい前に、バーニングとホールの
定理を見つけてたんじゃないか?」と思ってる。
だけど、室井和男さんという「塾講師(数学)でシュメール学者」
の方が「プリンプトン322を完全解読!」と宣言して
いらっしゃったのね。で、「くそぅ、先を越されたか!」と
思ってたんだけど、最近になって、その室井さんの解読結果に
穴があったと知ってしまったので、「よし、勝ったぜ!」と
思ったのよ。
だけど、どこに発表したらいいのか分からんのよ。『数学セミナー』?
『日経サイエンス』?『子供の科学』?『ムー』? で、いま
途方に暮れているところ。
0214Mr.Moto垢版2018/09/21(金) 09:00:35.72ID:wZU0ZxS/
>>205
> この程度なら、この界隈の人がとっくに見つけてたのではないか?
おれもそう思ったんだが、ラプラス変換みたいに「いっぺん別の
世界に行って、また戻ってくる」というラプラス変換みたいな
やり口は、物理屋や工学屋のやりそうな手法で、昨今の数学屋さんには
不得手なんじゃないか?と思った。だから、そっち方面で独立に
見つけてる人は たぶんいる。
> たとえば、>>194 の論文で全く同じことやってないか?
・偶数辺と奇数辺があり、斜辺(対角線)は奇数
・偶数辺は4の倍数
・斜辺は ≡ 1(mod 4)
・偶数辺×奇数辺×斜辺は 60 の倍数
あたりで手詰まりになってる。自分でも引っかかったので、
英語だけど風情はよくわかる。
「奇素数が出るとするなら、どこに出るか?」とか
「(m, n で表したときに)奇数辺が平方数の和差になってる
ところから、何か掴めないか?」とかスケベったらしい
コトを考えると、だいたい捕まるというのが体験的に
謂える。
まぁ、原始ピタゴラス数のことだけを考えると簡単なんだが、
「平方数の和差と素因数分解の関係」とか考えると、
そっちの方へ行きたくなる気持はよくわかる。
0216132人目の素数さん垢版2018/09/21(金) 23:21:39.37ID:v07S2Tmn
>>191-193について。
互いに素な奇数0<s<tを任意に取る。

v_{s,t}=( (t^2 - s^2)/2, st, (s^2 + t^2)/2 ) (横表記だけど縦ベクトルのつもり)

と置くと、v_{s,t}は必ず原始ピタゴラス数である。逆に、(x y z)を原始ピタゴラス数とする。
このとき、(x y z)=v_{s,t}となるような、互いに素な奇数0<s<tが一意的に存在する。
0217132人目の素数さん垢版2018/09/21(金) 23:22:57.96ID:v07S2Tmn
Barning-HallのU/A/Dとv_{s,t}の関係について。

互いに素な奇数0<s<tに対して、s∈(0,t)が成り立つので、
s∈(0,t/3)またはs=t/3またはs∈(t/3,t/2)またはs=t/2またはs∈(t/2,t)
のいずれかが成り立つ。すなわち、
(1) 0<2s−t<s
(2) 0<t−2s<s
(3) 0<s<t−2s
(4) s=t/3またはs=t/2
のうち、1つだけが成り立つ。
0218132人目の素数さん垢版2018/09/21(金) 23:25:07.38ID:v07S2Tmn
(1)のとき、0<2s−t<sは互いに素な奇数である。
(2)のとき、0<t−2s<sは互いに素な奇数である。
(3)のとき、0<s<t−2sは互いに素な奇数である。

(1)が成り立つとき、U^{-1}v_{s,t}=v_{2s-t,s} が成り立つ(左辺を計算するだけ)。
(2)が成り立つとき、A^{-1}v_{s,t}=v_{t-2s,s} が成り立つ(同上)。
(3)が成り立つとき、D^{-1}v_{s,t}=v_{s,t−2s} が成り立つ(同上)。
(4)が成り立つとき、もしs=t/2なら、2s=tとなるので、tが奇数であることに矛盾する。
よって、s=t/3となる。このとき3s=tなので、s,tが互いに素であることから、
s=1となり、よってt=3となる。このとき、v_{s,t}=(4 3 5) となり、
これは最小の原始ピタゴラス数である。
0219132人目の素数さん垢版2018/09/21(金) 23:26:24.83ID:v07S2Tmn
>>216-218を踏まえると、こちらがエスパーした>>204のアルゴリズムは、
実際にこのアルゴリズムで正しいことが分かる。
そして、このアルゴリズムは確かに高速だ。行列の積を計算しなくても、

U^{-1}v_{s,t}=v_{2s-t,s}
A^{-1}v_{s,t}=v_{t-2s,s}
D^{-1}v_{s,t}=v_{s,t−2s}

によって、vの添え字s,tの単純計算だけで済んでしまう。とても面白い。
0220132人目の素数さん垢版2018/09/21(金) 23:27:17.05ID:v07S2Tmn
だが、s,tの単純計算の計算量を行列の積の場合と比べてみると、
パラメータの桁数に関するオーダーとしては、定数倍の差しかないことが
分かった(次からのレスで書くが)。なので、オーダーの観点からは、
行列の積を計算してもs,tで計算しても同じオーダーになってしまう。
0221132人目の素数さん垢版2018/09/21(金) 23:29:01.18ID:v07S2Tmn
まず、>>200のアルゴリズムの効率について。当初の>>201では

>(あるいは、U^{-1},A^{-1},D^{-1}の性質上、前者しか起きないのかも?)

と書いたが、2s-tやt-2sが負の場合も含めて

U^{-1}v_{s,t}=v_{2s-t,s}
A^{-1}v_{s,t}=v_{t-2s,s}
D^{-1}v_{s,t}=v_{s,t−2s}

を考察すると、実際に前者しか起きないことが分かる。
なので、>>200のアルゴリズムの効率は、>>201から次のように改良できる。

eに合計でm個のU/A/Dを掛け算してvに辿り着くなら、>>200のアルゴリズムでは
行列の積の計算が3m回必要になる。また、(x y z)が原始ピタゴラス数であるか
どうかの判定には、「x,y,zが負になってないか」を判定するだけでよい。
0222132人目の素数さん垢版2018/09/21(金) 23:31:19.45ID:v07S2Tmn
では、行列の積の計算1回にかかる計算量と、
x,y,zが負になってないか判定するのにかかる計算量は、
それぞれどうなっているか。

v=(x y z)を原始ピタゴラス数とする。x,y,zそれぞれを2進法で表したときの桁数のうち
最大のものをn_{x,y,z}と表す。zの桁数が一番大きいので、実際にはzの桁数がn_{x,y,z}である。
次に、U^{-1},A^{-1},D^{-1}の成分は±1,±2,±3しかないので、(x y z)にU^{-1},A^{-1},D^{-1}を
掛け算すると、n_{x,y,z}の定数倍の計算量にしかならない。
よって、行列の積1回の計算で、n_{x,y,z}の定数倍の計算量にしかならない。
また、「x,y,zが負になってないか」の判定は上位1ビットを見ればいい(そこが符号の役目を
している処理系なら)ので、これは定数時間で終わる。よって、>>200のアルゴリズムを
1操作分やると、n_{x,y,z}の定数倍の計算量にしかならない。

よって、>>200のような普通のアルゴリズムの時点で、かなり効率がよいと言える。
0223132人目の素数さん垢版2018/09/21(金) 23:33:39.67ID:v07S2Tmn
次に、>>204のアルゴリズムの効率について。

(x y z)=v_{s,t}と表して、s,tに対して操作を行うのだから、
n_{s,t}に対する計算量を考えればよい。

(1) 0<s<t−2s
(2) 0<t−2s<s
(3) 0<2s−t<s

しかないので、実質的にはt−2sだけ計算すればよい、これはn_{s,t}の定数倍の計算量で終わる。
n_{s,t}は、sとtの桁数のうち最大のものを表しているが、s<tだから、実際にはtの桁数がn_{s,t}である。
また、x=(t^2−s^2)/2, y=st, z=(s^2+t^2)/2 なので、t^2/2<z<t^2 が成り立つ。
よって、2n_{s,t}−2≦n_{x,y,z}≦2n_{s,t}となることが分かる。
よって、n_{s,t}=n_{x,y,z}/2, n_{x,y,z}/2−1 である。
よって、n_{x,y,z}を基準にしても、t−2sの計算はn_{x,y,z}の定数倍の計算量で終わる。
0224132人目の素数さん垢版2018/09/21(金) 23:35:57.43ID:v07S2Tmn
>>200では、(x y z)→(x' y' z')→(x'' y'' z'')→…
という形でピタゴラス数そのものを変形していくが、
>>204では、v_{s,t}→v_{s',t'}→v_{s'',t''}→…
としてs,tの方を変形していく。

一番最初は、v_{s,t}=(x y z)という関係がある。操作1回のあとの
(x' y' z')とv_{s',t'}については、v_{s',t'}=(x' y' z')という関係がある。
操作1回のあとの(x'' y'' z'')とv_{s'',t''}については 、
v_{s'',t''}=(x'' y'' z'')という関係がある。・・・

このように、>>200>>204では、各ステップで同じ対象について計算が進んでいて、
各ステップで ”n_{s,t}=n_{x,y,z}/2, n_{x,y,z}/2−1”の関係式が成り立つ。
0225132人目の素数さん垢版2018/09/21(金) 23:40:54.54ID:v07S2Tmn
よって、>>200>>204は、処理全体が終わるまで見ても
定数倍の違いしかないことになるので、オーダーとしては同じになってしまう。
もちろん、定数倍の部分は>>204の方がずっと小さいので性能が良いと言えるが、
オーダーの観点からは定数倍の差でしかない。
0226132人目の素数さん垢版2018/09/21(金) 23:43:25.30ID:v07S2Tmn
当初の話は、

「行列の積で逆問題を考えると有効な手立てがなくて
未解決問題だったが、連分数や図形で考えると効率よく解決する」

という話だったはず。しかし、行列の積で逆問題をやってる>>200でも、
v_{s,t}のs,tに対する単純計算だけで終わっている>>204でも、定数倍の違いしか
効率が変わらないので、行列の積で不満があるなら>>204でも不満があるはずだし、
逆に>>204で満足なら行列の積の>>200でも満足のはず。
0227132人目の素数さん垢版2018/09/21(金) 23:45:31.91ID:v07S2Tmn
>>200では不満だが>>204なら満足」という立場を維持するには、
定数倍の部分がとても小さいから>>204で満足、と考えるしかない。

実務で使いたい人ならそういう立場でもいいのだが、
あくまでも理論的な未解決問題として考えたときには、
定数倍の違いしかないアルゴリズムを未解決問題だったとは普通は言わないので、
結局、この手の話で何かが未解決だったというのは考えにくい。

今も未解決のまま残っている問題は実際に存在するのかもしれないが、
少なくともこの話が未解決だったわけではないと思う。
0228132人目の素数さん垢版2018/09/21(金) 23:48:57.33ID:v07S2Tmn
そろそろ連投規制に引っかかる予感。

次に、v_{s,t}ではなく、別の公式を使った場合の>>204について。
互いに素かつ偶奇の異なる正整数0<s<tに対して

w_{s,t}=( t^2 - s^2, 2st, s^2 + t^2 )

と置くと、w_{s,t}は必ず原始ピタゴラス数である。逆に、(x y z)を原始ピタゴラス数とする。
このとき、(x y z)=w_{s,t}となるような、互いに素かつ偶奇の異なる正整数0<s<tが一意的に存在する。
v_{s,t}よりもこっちの方が有名な気がする。
0229132人目の素数さん垢版2018/09/21(金) 23:50:44.57ID:v07S2Tmn
Barning-HallのU/A/Dとw_{s,t}の関係について。

互いに素かつ偶奇の異なる正整数0<s<tに対して、s∈(0,t)が成り立つので、
s∈(0,t/3)またはs=t/3またはs∈(t/3,t/2)またはs=t/2またはs∈(t/2,t)
のいずれかが成り立つ。つまり、
(1) 0<2s−t<s
(2) 0<t−2s<s
(3) 0<s<t−2s
(4) s=t/3またはs=t/2
のうち、1つだけが成り立つ。
0230132人目の素数さん垢版2018/09/21(金) 23:53:55.86ID:v07S2Tmn
(1)のとき、0<2s−t<sは互いに素かつ偶奇の異なる正整数である。
(2)のとき、0<t−2s<sは互いに素かつ偶奇の異なる正整数である。
(3)のとき、0<s<t−2sは互いに素かつ偶奇の異なる正整数である。

(1)が成り立つとき、U^{-1}w_{s,t}=w_{2s-t,s} が成り立つ(左辺を計算するだけ)。
(2)が成り立つとき、A^{-1}w_{s,t}=w_{t-2s,s} が成り立つ(同上)。
(3)が成り立つとき、D^{-1}w_{s,t}=w_{s,t−2s} が成り立つ(同上)。
(4)が成り立つとき、もしs=t/3なら、3s=tとなるので、s,tの偶奇が一致してしまい、矛盾する。
よって、s=t/2となる。このとき2s=tなので、s,tが互いに素であることから、s=1となり、
よってt=2となる。このとき、w_{s,t}=(3 4 5) となり、これは最小の原始ピタゴラス数である。
0231132人目の素数さん垢版2018/09/21(金) 23:55:55.83ID:v07S2Tmn
よって、w_{s,t}を使っても、>>204と同じアルゴリズムが成り立つ。

計算した感触からすると、原始ピタゴラス数を2つの変数で表す公式が得られるたびに、
その公式に対応した>>204のアルゴリズムが必ずあるような予感がする。
0232132人目の素数さん垢版2018/09/22(土) 01:13:34.73ID:Z3ZHtaSh
>>144 にて私は、全てのピタゴラス数は、単位円上の一つの有理点に対応し、その有理点は
一つの有理数に対応可能だと言うことを指摘しました。
ピタゴラス数を探すと言うことは、有理数を探すことと同値です。

また、偶然にも私は、>>149 にて、「ユークリッドの互除法」は、
「(a と b の公約数)=(a と a-b の公約数) の積み重ねだ」とも指摘しました。
通常ユークリッドの互除法は最大公約数を見つける方法と認識されますが、最大公約数が1
だということになれば、「互いに素」であることを示す道具にもなります。

Mr.Motoさんの
>>{p', q'} = {p, |q - 2q|}
という変換は、pとqの最大公約数を求めるための、途中計算と考えることができます。
その際利用しているのは、「(a と b の公約数)=(a と a-b の公約数)」という内容。
ただし、これを、一歩ずつではなく二歩ずつ行っていると、考えるのです。
このようにして、(1,3)へ到達したならば、元々の奇数の組み合わせ(p,q)は、互いに素だったことを意味し、
同時にそれに対応する原始ピタゴラス数を表す有理数、指標となります。
このチェックの際辿った、(p,q)の変換経路は、ピタゴラス数を三分木構造に当てはめたときの、
樹形図上の経路そのものです。
0233132人目の素数さん垢版2018/09/22(土) 01:14:17.85ID:Z3ZHtaSh
親の方へ向かう変換は、最大公約数の計算or互いに素かどうかのチェックであり、
子の方へ向かう変換は、有理数の探索 or 作成に相当します。

ただ、2段飛びなので、全ての有理数を網羅することはできません。
分母分子とも奇数の場合しか回れませんから。
しかし、「ピタゴラス数の探索」という意味では、(奇数、奇数)の組み合わせだけで必要十分です。
一組のピタゴラス数に対応する単位円上の有理点は実は二つあります。(例:(5/13,12/13)と(12/13,5/13))
その有理点に対応する有理数は、一方は分母分子が両方とも奇数だし、もう一方は分母分子が、
偶数奇数混合型だからです。(先ほどの例では、1/5と2/3が対応)

(3,4,5)にUAD行列を施して制作される原始ピタゴラス数樹形図は、
(1,3)に>>209で記した変換公式を施して制作する有理数樹形図と同一で、お互いに変換可能です。
同様に、(1,2)に>>209で記した変換公式を施しても有理数樹形図ができますが、これらも、お互いに変換可能です。
そして、下二つの有理数樹形図で、全ての有理数を過不足無く網羅します。

UAD行列を使う場合も、(p,q)変換公式を使う場合も、プログラム的にはほとんど差はありません。
前者は同時に三数を扱う一方、後者は二数だけなので、この分高速になります。
ただし、「原始ピタゴラス数を順に表示する」というのが目的であった場合は、変換コストを払う必要があるため、
前者の方が速いかもしれません。特定の場合だけ表示するのであれば、後者の方が高速でしょう。
0234Mr.Moto垢版2018/09/22(土) 10:47:55.01ID:HnrBqlD1
おお、すばらしい。
お二方に感謝する。

個人的には、「行列を使ってないので、
中学生にも理解できるだろう」という点から、
教育分野で利用してくれれば、と思う。
いわゆる「ユークリッドの互除法」は、
分数の約分・通分には便利なアルゴリズムだし、
それを単位格子に適用すると連分数や
フィボナッチ螺旋にする話題にも持ってゆける。
「単位円上に無限個の有理点が存在する」という
証明にもつながれば、「そもそも、一般式をどうやって
導出できるか?」(『数学ガール』にも出てくる)
という話にもなる。
これで少しでも数学嫌いが減ってくれれば嬉しい。
0235Maria垢版2018/09/22(土) 10:54:18.49ID:HnrBqlD1
もうひとつ、「世界最古の都市文化」といわれる
古代バビロニア(「シュメールのほうが先じゃん」という
意見はあるんですが、そのあたりの議論は略)の時代に、
すでにピタゴラス数について研究していた人々がいた
(まぁ、長方形だし、ピタゴラス生まれてねぇし、みたいな
話はあるとして)、というのが分かっただけで面白いし、
コンピュータを利用して、「当時の人々が、どんなことを
考えていたのか」がうかがい知れるので、ソフトウェア
教育にも利用してほしいな、と思っています。

どうも、ありがとうございました m(_ _)m
0236Maria垢版2018/09/22(土) 11:11:25.14ID:HnrBqlD1
あ、あと、この件に関して、とくに権利とかを
主張するつもりはないので、
どこかで発表するとか論文にして公開する場合でも、
好き勝手にやっちゃってください。

「それも気づまりだな」という律儀な方は、遠慮なく
nsb14421@nifty.com
までメールしてください(アットマークは半角に)。
では。(^_-)b~*
(Maria & Mr.Moto)
0237132人目の素数さん垢版2018/09/22(土) 12:41:25.33ID:yBUKZrOh
大元のHallの論文が載ったMath Gazzetteは教育用の雑誌なので
投稿するといいんじゃないかなあ

まあ話を聞いていると、学術論文にまとめる訓練を受けてないから
敷居が高いと思ってるような気がする
論文を書くマニュアル作業を身につけるのも指導者がいないと難しい
0238Mr.Moto垢版2018/09/22(土) 13:56:08.06ID:HnrBqlD1
>>237
> まあ話を聞いていると、学術論文にまとめる訓練を受けてないから
> 敷居が高いと思ってるような気がする
> 論文を書くマニュアル作業を身につけるのも指導者がいないと難しい
いちおう学術論文にまとめる訓練は受けているんだが (^_^!)、
ジャンルと学会によってテイストが違うのよ。
「電気学会」と「電気通信学会」と「日本コンピュータ科学会」でも
違うし、「日本航空宇宙学会」もまた違うだろうし、「言語処理学会」と
「計量国語学会」でも違うと思う。

「数学教育協議会」とか「日本数学教育学会」とかにアプローチするのが
早道なんかな? 「古代バビロニアの数学粘土板」とか言っても、
なかなか通じないんだよな。都立雪谷高校の数学の先生にも訊いてみたんだが、
「同僚にも訊いてみたけど、ちょっと ……」みたいな話だった。
0239132人目の素数さん垢版2018/09/22(土) 14:58:27.71ID:yBUKZrOh
>>238
申し訳ないが、あなたは何か根本的にわかってないように思う
テイストが違うのはわかるが、あなたの数学の説明の仕方はこなれてない

問い合わせしている相手も間違ってる
大学のいわゆる数学科に属している教員に接触しましょう
「数学教育協議会」とか「日本数学教育学会」は別物

あなたの結果は大体わかったつもり、以下の雑誌を勧める
Math Gazzette
https://www.cambridge.org/core/journals/mathematical-gazette

Mathematics Magazine
https://www.maa.org/press/periodicals/mathematics-magazine
0240Mr.Moto垢版2018/09/22(土) 15:08:42.28ID:HnrBqlD1
>>239
> あなたの数学の説明の仕方はこなれてない
すまん (^_^!)
もともと航空屋でソフトウェア業界人なので、
「だって飛んでるじゃん」「だって動いてるじゃん」
で済ませてきたもんだから、わりとリクツは後回しなんだ。
演算子法のオリヴァー・ヘヴィサイドじゃないけど、
「数学は実験的科学であり、定義が先にくるわけではない」
「私が消化のプロセスを知らないからといって、ディナーを
断らなければならないのか?」っつースタイルなもんだから、
「数学的に厳密な論文の記述スタイル」っつーのに
なじめないところはある。
0241132人目の素数さん垢版2018/09/22(土) 16:04:25.19ID:yBUKZrOh
>>240
ヘヴィサイド同様に、適切な証明を書かないとrejectされます
それが数学の流儀ですので、自分はすごい結果を出しているのに〜
と言っても通りません

数学でも新規性が高くはなくても掲載する雑誌はあります
あなたが馴染めないのは自由ですが論文掲載までの手続きは変わりません
0243M.B.垢版2018/09/22(土) 16:57:18.48ID:HnrBqlD1
>>241
つーか、数学における「行列の積」っていうのが、
ソフト屋における「配列の積」っていうのと
ちょっと違う、っていう問題があるのよね。
内積(スカラー積)と外積(ベクトル積)という
概念上の差があるのは分かるんだけど、
プログラマの頭にあるのは、「一次元配列と
二次元配列の積っていうのは、どうイメージしたらいいのか?」
っていう話なのよ。
{x, y, z}・{x', y', z'} = x*x' + y*y' + z*z'
みたいな頭があるんで、「縦ベクトルと横ベクトル」みたいな
イメージとかとは、ちょっと違う頭で考えてんですよね。
0244Maria垢版2018/09/22(土) 19:32:41.02ID:HnrBqlD1
>>239 による批判があったので、真面目にお応えしたいと思います。

とりあえず、
v_{p, q} = { (q^2 - p^2) / 2, p * q, (p^2 + q^2) / 2 }
(p, q は、互いに素な奇数。ただし 0 < p < q)
と、
w_{m, n} = { n^2 - m^2, m * n, m^2 + n^2}
(m, n は、偶奇が異なる互いに素な自然数であり、0 < m < n)
というところから始めましょう。
このあたり、ツッコミがございましたら歓迎いたします m(_ _)m
0245132人目の素数さん垢版2018/09/22(土) 19:49:07.38ID:HnrBqlD1
早々にごめんなさい m(_ _)m

v_(p, q) = { (q^2 - p^2) / 2, p * q, (p^2 + q^2) / 2 }
(p, q は、互いに素な奇数。ただし 0 < p < q)
と、
w_(m, n) = { n^2 - m^2, m * n, m^2 + n^2}
ですね。

で、
v_(1, 3) = {4, 3, 5}
かつ
w_(1, 2) = {3, 4, 5}
であり、
「ピタゴラス数について、偶数項=偶数項、(最大ではない)
奇数項=奇数項、斜辺(あるいは対角線)項 = 斜辺項」あるいは
任意の自然数 n について「偶数項=偶数項 × n、奇数項=奇数項 ×、
斜辺項 = 斜辺項 × n」が成り立つときに、合同(≡)であるとする。

したがって、
v_(1, 3) ≡ w_(1, 2) ≡ {4, 3, 5} ≡ {3, 4, 5} ≡ {45. 60, 90}
である。
0246Maria垢版2018/09/22(土) 19:54:38.80ID:HnrBqlD1
プログラマ的にいうと、
「a ≡ b」は、「equals(a, b) == true」であり、
「{3, 4, 5} = {4, 3, 5}」は、
「({3, 4, 5} == {4, 3, 5}) != true」だということです。
0247Mr.Moto垢版2018/09/22(土) 21:13:52.56ID:HnrBqlD1
選手交代。
で、ここからが面白いんだ。
1)v_{p, q} = { (q^2 - p^2) / 2, p * q, (p^2 + q^2) / 2 }
(p, q は、互いに素な奇数。ただし 0 < p < q)
2)w_{m, n} = { n^2 - m^2, m * n, m^2 + n^2}
(m, n は、偶奇が異なる互いに素な自然数であり、0 < m < n)
という関数の、逆関数を考えよう。
{x, y, z} が原始ピタゴラス数だったら、(p, q) も (m, n) も
一意に(自然数として)求まるんだが、
{x, y, z} が「原始ピタゴラス数ではない、一般のピタゴラス数」
である場合、(p, q) や (m, n) は、自然数に落ちない!!!

これは、一度 自分で計算して確かめてみることをお奨めする。

つまり、V_(p, q) および W_(m, n) を(「引数が自然数である」
という条件を保ったまま)「原始ピタゴラス数ではない、
一般のピタゴラス数」に拡張しようと思うと、引数を一個増やさないと
いけない。つまり、V_(s, p, q) または W_(s, m, n) で表さないと
いけない。
これが、プリンプトン322の11番と15番が “原始” ピタゴラス数に
なっていない理由につながっていたりする。
0248132人目の素数さん垢版2018/09/23(日) 02:18:55.23ID:6r9Vk7wm
おそらく、>>127 に大きな勘違いがあるのが見えます。

>> 脱帽します。私は、Barning と Hall の業績を知ったうえで、
>> その逆問題(任意の原始ピタゴラス数を、{3, 4, 5}と
>> U, D, A の積で表すアルゴリズムを求める)が未解決
>> だというのを知り、それを連分数によって解決してから、
>> 図形的な解法を思いつきました。

とありますが、「任意の原始ピタゴラス数を、{3,4,5}とU,D,Aの積で表すアルゴリズムを求める問題」
は簡単に解決しています。「解決」と書きましたが、問題設定と同時に解かれるような問題で、
「解決」という言葉は、不適当と感じるような内容です。
私の一番最初の投稿 >>119 のプログラムの中に、原始ピタゴラス数を与えると、「番号」を返す
関数がありますが、それが、具体的な手順を与えるプログラムになります。
UDAが書かれていないじゃないかというかもしれませんが、「番号」にその情報が詰め込まれています。
番号は三分木構造の住所を表す指標となっています。住所が分かれば、(3,4,5)と、どのような経路を経て
あるいは、長男、次男、三男の誰を通して、あるいは、U,D,Aのどれを適用して、その原始ピタゴラス数
と繋がっているか、一意に決定されます。具体的な手法は >>208 に記してあります。

「逆問題」が、ここで書かれている内容であれば、未解決であるはずがありません。そう仰っていた方が間違っている
のかもしれませんし、未解決としている部分を勘違いされているかもしれません。整理を望みます。
0249132人目の素数さん垢版2018/09/23(日) 08:52:50.57ID:6r9Vk7wm
>>119は a^2+b^=c^2下での恒等式 (-a-2b+2c)^2 + (-2a-b+2c)^2 = (-2a-2b+3c)^2を利用した
原始ピタゴラス数に関する各種プログラムでしたが、今回は

p/q → p/(2p+q) , q/(-p+2q) , q/(p+2q)

という変換が、有理数生成法として完全系であることを利用したプログラムとなっています。
多くの場面で前回のものを流用し、サンプルなどは同じ物を使っていますが、エンジンは別物です。
前回のエンジンは、事実上UDA行列の利用と同じで、原始ピタゴラス数の三数を媒介しているのですが、
今回媒介しているのは、有理数p/qで、整数二つです。

http://codepad.org/W400rZjo

4種類の内容をまとめて走らせています。
・p,qを小さい方から変化させ、pq値、ピタゴラス数、番号を表示
・番号順にpq値、ピタゴラス数を表示
・与えられたピタゴラス数に対し、pq値、番号を表示
・与えられた番号に対し、pq値、ピタゴラス数を表示

手抜き感満載なのはご了承ください。
0250Mr.Moto垢版2018/09/23(日) 09:28:41.44ID:7dQacGQe
>>248
任意の原始ピタゴラス数があったとして、
それに U^(-1) ・ A^(-1) ・ D^(-1) をそれぞれ
掛けて、そのうち意味のあるものが「親」にあたるので、
e に到達するまで その操作を繰り返せばいい。
そういう意味では、そもそも「逆問題」というものは
存在しない、とも言えます。
で、細矢 治夫先生が、『トポロジカル・インデックス』の中で、
Barning=Hall の定理の「大きな泣き所」としているのが、
この「試行錯誤が必要」という点でした。
「試行錯誤ではなく、アルゴリズムの形で、ストレートに解けないか?」
という問題意識があり、「そういう方法があるはずだ」という予想が
ありました。ところが、「行列」という視点で問題に取り組むと
なかなか面倒臭いことになる。
それを、「互いに素であり、相異なる自然数の組」からなる
空間に移動し、そこから {1, 2} あるいは {1, 3} へ移動する
ルートを探すという方法だと、「大きい方から小さい方を二回
引いて、絶対値を取る」だけでルートが見つかってしまう。
で、「大きい方から小さい方を引く」という操作は、「ユークリッドの
アルゴリズム」として知られているものです。現在は「互除法」と
呼ばれ、「大きい方を小さい方で割った余りを求める」と捉えられて
いますが、ユークリッド自身の記述によれば、「互減法」とも
いうべきものです。
ですから、「未解決問題を解いた」というより、「素朴な証明を
提出した」くらいの話になるでしょうか。
0251132人目の素数さん垢版2018/09/23(日) 09:44:11.88ID:6r9Vk7wm
試行錯誤は必要ありません。

>>119の三つ目のプログラムをご覧ください。
q[0]=- p[0]-2*p[1]+2*p[2];
q[1]=-2*p[0]- p[1]+2*p[2];
q[2]=-2*p[0]-2*p[1]+3*p[2];
if(q[0]<0){
q[0]=-q[0];
if(q[1]<0){q[1]=-q[1];r=1;}else{r=-1;}
}else{
if(q[1]<0){q[1]=-q[1];r=0;}else{return 0;}
}
return 3*g(q)+r;
と書きました。q[0]の正負、q[1]の正負で、rの値を -1,0,1 と変化させています。
これが将に、長男、次男、三男の見極めなんです。

これは、(-a-2b+2c)^2 + (-2a-b+2c)^2 = (-2a-2b+3c)^2 を利用して新しい
ピタゴラス数を生成させる際、a→-a という置き換えを使ったか、
b→-bを使ったか、両方の符号反転を使ったかに対応します。
0252Maria垢版2018/09/23(日) 09:44:51.49ID:7dQacGQe
>>250
で、ここに至る過程で、「 q / p を連分数展開したらどうなるか?」と
思いついて、「U・D・A というのは、そのときのどういう操作に
対応しているのか?」を考えて、そこに 2 が出てくるということに
気づきました。奇数+偶数=奇数、偶数+偶数=偶数 ですから、
「互いに素で相異なる二数に対して、『大きいほうから小さい方を二回引く』
という操作を行なっても、『互いに素である』という性質は保存され、
『ともに奇数』『偶奇が異なる』という性質も保存される」という
ことになります。
問題は、q - 2p がマイナスの場合です。このとき、「長方形から
正方形をふたつ取り去ったときに、面積がマイナスになってしまう」
ということになるわけですが、それも図形的に解釈できました。
「じゃあ、その逆操作は?」ということになり、「それは三通りある」
ので、U ・ D ・ A と比較してみると、それぞれが対応していることが
わかりました。
「意外に気づかんもんだなぁ」と思ったんですが、しつこいようですが
プリンプトン322は五十年以上未解読で、いろんな人があーだこうと、
みんなそっちへ行っちゃうということは、あるんだなぁ、と。
それで、「こういう面白い話があるんですよ」と、お知らせしようと
思いました。
0253Maria垢版2018/09/23(日) 10:00:45.29ID:7dQacGQe
プリンプトン322は、古代バビロニアの数学粘土板です。
おおむね三千八百年前、ハンムラビ王の治世のころに
作成されました。文書のスタイルとしては、当時の
公文書のスタイルで書かれていて、書かれている文字については、
室井 和男先生が解読されています。詳しくは、中村滋『数学の花束』を
どうぞ。読んだことないけど。
で、そこには15個のピタゴラス数が記されています。
0254Maria垢版2018/09/23(日) 10:08:30.72ID:7dQacGQe
この15個の数値に関しては諸説あるんですが、
現時点ではエレノア・ロブソンという人(あたし、
会ったことないけど、この人嫌い)の説です。
「プリンプトン322は、初期見習いのための
計算の課題である」というものです。
これとは別のマイナーな説ですが、「これは
三角関数表である」というのがあります。
オットー・ノイゲバウアー先生と室井和男さんが
この説を支持しています。
すなわち、
・三角関数なので、直角三角形(あるいは、単位円上の
有理点)の表である。
・公式としては W_(m, n) を使った。
・範囲としては、45° から 30° まで。
・だいたい一度ごとに、計算するときに便利な値を
選んだら、この15個になった。
ということです。けっこう説得力がありますね。
0255Maria垢版2018/09/23(日) 10:13:37.33ID:7dQacGQe
ところが、W_(m, n) を使って原始ピタゴラス数を
計算すると、うまくこの15個が出てこないんですよ。
「なんか、これ違うんじゃない?」と思ってよく見ると、
短辺と長辺の比が、1.0 と 1.618 の間に入ってるんですよね。
「これ、三角関数じゃなくて、長方形なんじゃない?」と。
つまり、「正方形と黄金長方形の間にある、縦横と対角線の
長さが、自然数の比で表現できる長方形の表」なんではないかと。
ところが、それにしても m, n の値が半端なのが気に入らない。
0256Maria垢版2018/09/23(日) 10:18:19.87ID:7dQacGQe
そんでもって、「これは公式が違うんじゃない?」と
思っていろいろ調べているうちに、V_(p, q) の式に
辿り着きました。そこで計算してみると、
まぁ、なんということでしょう。
正方形と黄金長方形の間にある、q < 180 のときの
V_(p, q) で表される15個の長方形が、プリンプトン
322に記されている 15 個の数と、一致するでは
ありませんか!
0257Maria垢版2018/09/23(日) 10:24:50.25ID:7dQacGQe
ただ、ここで喜ぶのはまだ早い。45° から30° というと、
1.0 から √3まで、ということになりますよね? だったら、
その範囲でも15個になるかもしれません。で、計算してみたところ、
1.618 と 1.7320508 の間に、一個、解があるではありませんか。
あの連中(もはや古代バビロニア神殿の書記たちは他人ではありません。
心の友です)が、これを見逃すわけがない。やっぱり黄金比だ!

謎はあと二つ。
1)#11 は 15 倍、#15 は 2 倍されていて、原始ピタゴラス数になっていない。
2)粘土板の向かって左端が削られている。
なぜでしょうか?というものです。
0258Maria垢版2018/09/23(日) 10:28:40.20ID:7dQacGQe
ここから先は、あたしたちの妄想です。
#11 の長辺には、60 という数字が出てきます。で、
60 には、1, 2, 3, 4, 5, 6 が約数として出てきます。
そこで、#15 に着目すると、その面積に
1, 2, 3, 4, 5, 6, 7, 8, 9, 10 が出てくるんです!
うん、キミらはそういうのが好きなんだね? わかるわかる。
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況