トップページ数学
330コメント213KB
ピタゴラス数をなんと 〜荒らされたので立て直しました〜 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001旭=1000
垢版 |
2016/11/02(水) 07:53:23.97ID:kmhD7zB7
自分で作ったプログラムでa^2+b^2のaが35万以上計算しました。
100万以上に向けて頑張りたいと思いますので
応援お願いいたします。
プログラムにバグがあった場合抜けている数があると思うので
その点には留意いたしたいと思う次第であります。
0092132人目の素数さん
垢版 |
2017/07/21(金) 22:38:41.63ID:TROq1Jv/
☆ 日本人の婚姻数と出生数を増やしましょう。そのためには、☆
@ 公的年金と生活保護を段階的に廃止して、満18歳以上の日本人に、
ベーシックインカムの導入は必須です。月額約60000円位ならば、廃止すれば
財源的には可能です。ベーシックインカム、でぜひググってみてください。
A 人工子宮は、既に完成しています。独身でも自分の赤ちゃんが欲しい方々へ。
人工子宮、でぜひググってみてください。日本のために、お願い致します。☆☆
0093132人目の素数さん
垢版 |
2018/05/01(火) 19:24:04.93ID:21rJWgQ2
耳栓をしたら世界が変わってワロタ
0104132人目の素数さん
垢版 |
2018/05/01(火) 22:25:24.30ID:21rJWgQ2
耳栓をしたら世界が変わってワロタ
0115132人目の素数さん
垢版 |
2018/05/20(日) 21:46:31.80ID:N/saMlPT
耳栓をしたら世界が変わってワロタ
0116132人目の素数さん
垢版 |
2018/07/19(木) 08:31:54.15ID:QdFs1nu3
>>1
いま、このスレをみつけたんだが、
「ピタゴラス数」っていうのは
「一般のピタゴラス数」なのか? それとも
「原始ピタゴラス数」なのか?
細矢治夫『トポロジカル・インデックス ー
フィボナッチ数からピタゴラスの三角形
までをつなぐ新しい数学』(日本評論社)の
第六章『ピタゴラスの三角形とトポロジカル・
インデックス』は読んでみたか?
で、>>63 以降、なにか進捗があるか?
0118132人目の素数さん
垢版 |
2018/07/19(木) 13:48:21.86ID:QdFs1nu3
「ピタゴラス数の公式」っつっても二種類あるんだわ。
「偶奇の異なる、互いに素な (m, n) (0 < m < n)について、
{n^2 - m^2, 2mn, m^2 + n^2}」と、
「互いに素な奇数 p, q (0 < p < q)について、
{(q^2 - p^2 }/2, pq, (p^2 + q^2) / 2」な。
歴史的には後者のほうが古くて、三千八百年くらい
昔の史料に残ってる。
当時は数式というものがなかったから、図形的に
表すんだったら後者のほうが都合がよかったんだろう。
0119132人目の素数さん
垢版 |
2018/07/20(金) 20:22:49.38ID:vXU3wHb2
スレ主さんは、「ピタゴラス数の探索」を意図しているようですが、「探索」は無駄です。
原始ピタゴラス数を順次生成するアルゴリズムが存在してます。
しかも、この方法は、「全て」の原始ピタゴラス数を網羅していることが判っています。

ここまではよく知られている事実ですが、私は勝手にこの原始ピタゴラス数をナンバリングしました。下に、
「順番と原始ピタゴラス数を列挙するプログラム」(サイトの制限で2700ほどしか表示できません)
「順番を与えると、それに対応する原始ピタゴラス数を表示するプログラム」
「原始ピタゴラス数を与えると、それに対応する順番を返すプログラム」
の三つを添えましたので、よかったら参考にしてください。

http://codepad.org/VKGibeHo
http://codepad.org/M3SRsSsH
http://codepad.org/hiHjDlZy

なお、三つ目のプログラムは、原始ピタゴラス数を、(奇数項,偶数項,斜辺項) の順番に与えなければなりません。
もちろん、「原始」なので、最大公約数は1で無ければなりません。
本来ならば、この辺の融通が利く形でアップすればいいのでしょうが、面倒なので省略しました。ご了承ください。
0120132人目の素数さん
垢版 |
2018/07/20(金) 22:05:36.48ID:vXU3wHb2
ちょっとだけ補足します。この三つのプログラムいずれにも、
>> p[0]= - s1*a -2*s2*b + 2*c;
>> p[1]= -2*s1*a - s2*b + 2*c;
>> p[2]= -2*s1*a -2*s2*b + 3*c;
のようなものが登場します。初見だと、何のことだか全く判らないかもしれないので、説明を加えます。

原理は、単純です。次の問題を考えてみてください。
「直角三角形があります。斜辺とある一辺の長さの差は1、斜辺と残りの一辺の差は2です。三辺は何か?」
答えはもちろん 3,4,5 です。では、次の問題は?
「直角三角形があり、斜辺とある一辺の長さの差はx、斜辺と残りの一辺の差はy。直角三角形の三辺を、xとyで表せ。」
あるいは、「a^2+b^2=c^2、x=c-a、y=c-b の関係があるとき、a,b,cをx,yで表せ」

この問題を解くことにより (y±√(2xy))^2 + (x±√(2xy))^2  = (x+y±√(2xy))^2 ; (複合同順)
という恒等式を見いだすことができ、2xy=(a+b-c)^2に注意して、書き換えれば、
(c-b±(a+b-c))^2 + (c-a±(a+b-c))^2 =(2c-a-b±(a+b-c))^2 が得られます。
プラス側からは、a^2+b^2=c^2という、前提にしていたつまらない式が現れますが、マイナス側からは、
(-a-2b+2c)^2 + (-2a-b+2c)^2 = (-2a-2b+3c)^2 ・・・ (★)
を得ます。これがプログラムに登場する式の骨格です。a^2+b^2=c^2 が成立するときに(★)が成立するなら、
aを-aに置き換えた、( a-2b+2c)^2 + ( 2a-b+2c)^2 = ( 2a-2b+3c)^2 も成立し、...というのが、
ある原始ピタゴラス数から、別の原始ピタゴラス数を生成するアルゴリズムとなっています。
0121132人目の素数さん
垢版 |
2018/07/23(月) 10:34:41.57ID:jaHqJHEC
>>120
Barning と Hall の U・D・A 行列だな?
おれも、岐阜東高等学校の亀井先生の話でハマッた。
0122ナブー
垢版 |
2018/07/23(月) 13:08:37.66ID:Fu1mV0Fm
>>119
一般のピタゴラス数は、一見4自由度に見えるが、
「原始ピタゴラス数」に限れば大めに見積もっても
3 自由度しかない。で、偶数足と奇数足が決まれば
斜辺長は決定されるので、たかだか 2 自由度でしかない。
だったら長方形の話に落ちるじゃん、という話がまずひとつ。
0123ナブー
垢版 |
2018/07/23(月) 13:17:46.68ID:Fu1mV0Fm
>>119
そんなわけで、原始ピタゴラス数の問題は、
「偶奇が異なり、かつ互いに素な自然数 m, n (ただし 0 < m < n)」
または、「互いに素な、相異なる自然数」の問題に帰着する。
こっから先は、数学屋さんに訊いてみてから、ゆっくり考えてみてくれ。
ネタバレとかしちゃうと恨まれそうだから。
0124132人目の素数さん
垢版 |
2018/07/23(月) 14:17:20.67ID:Fu1mV0Fm
>>120
ところで、ピタゴラスの定理を「三角形」で考えるのは
いかがなものか、とつねづね思ってるんだよ。
「縦横と対角線の比が自然数の比で表せる」と考えたほうが、
すっきりするような気がするんだが、どうだ。
0125132人目の素数さん
垢版 |
2018/07/23(月) 18:59:02.64ID:Fu1mV0Fm
>>124
すまん。
この場合の「ピタゴラスの定理」というのは、
自然数の範囲内で考えた場合の話だ。
ユークリッド空間みたいに、実数まで拡張した
場合は(とはいえ、ギリシャ数学では、「有理数」はともかくも
「実数」という概念は十分に整理されていなかったという話は、
また別にあるのだが)、たぶん十八世紀とか十九世紀とかに
ならないと、確立されていないと思う。
0126132人目の素数さん
垢版 |
2018/07/23(月) 20:39:55.04ID:oIyAsENO
>>124
原始ピタゴラス数を見つけるという問題は、単位円上の有理点を見つけるという問題とほぼ等しい。
高校で教わる三角関数の有理表現 cosθ=(1-t^2)/(1+t^2)、sinθ=2t/(1+t^2)
を介せば、ある有理数 t に対し、単位円上のある有理点が対応し、それを原始ピタゴラス数に対応させることができます。
つまり、原始ピタゴラス数は、有理数と1対1に対応可能で、その意味で、
>> 「縦横と対角線の比が自然数の比で表せる」と考えたほうが、 すっきりするような気がするんだが、どうだ。
は自然な考えと言えます。

「ピタゴラス数の生成」 の様なワードでググると、多くの場合は>>123で書かれているような方法が紹介されています。
発生させるだけなら、その方法はシンプルでしょう。しかし、私は別の切り口を与えたかった。つまり、整列です。
原始ピタゴラス数に、1から順番に、番号を与えたかったのです。その具体的な手法(計算方法)が>>119のプログラムに書かれています。

>>122
原始ピタゴラス数と自然数を1対1に対応させる事が可能というのが、>>119の主張の一端。
「自由度」というのを勝手な独立変数の数と解釈すると、「自由度1、しかも自然数のみを走る」と言えます。

>>121
私自身は彼らの仕事を知らずに、導いたものです。内容は中学から高校レベルの数学しか用いていないので、新発見などとは全然
思っていませんが、導入部分、つまり、斜辺との他の二辺の差から、元の直角三角形の三辺を復元する問題を考えることで、
このアルゴリズムに自然に到達できたという点については、もしかすると、オリジナリティがあるかもしれないとは思っています。
0127132人目の素数さん
垢版 |
2018/07/23(月) 21:23:43.36ID:Fu1mV0Fm
>>126
> 原始ピタゴラス数を見つけるという問題は、単位円上の有理点を見つけるという
> 問題とほぼ等しい。
結城浩さんの、『数学ガール』にもありましたね。
「単位円上に、有理点が無限個存在する」ことの証明に、
「ピタゴラ・ジュースメーカー」という名前で原始ピタゴラス数の
一般式が出てきました。

> しかし、私は別の切り口を与えたかった。つまり、整列です。
> 原始ピタゴラス数に、1から順番に、番号を与えたかったのです。
すなわち、「原始ピタゴラス数は加算無限個なのだから、自然数と
一対一に対応づけられる」という発想ですね。
あとは、「互いに素な奇数の積」(一般的な式は、「偶奇の異なる、
互いに素な自然数」としていますが、ユークリッドが残している式は、
「奇数&奇数」であり、「0 の発見者」として知られているプラーマグプタ
が書き残したものが最古のようです)が同じであるときに、どのように
順序付けが可能なのか、という話になると思います。
このとき、二つの奇数 p と q を考えたときに、長方形 p × q を
考えて、「面積が同じであるときに、正方形に近いのはどっちか?」
を考えると、順序付けが可能です。
たとえば「7 × 15」と「5 × 21」と「3 × 35」だったら、
順序付けが可能ですよね?

> 私自身は彼らの仕事を知らずに、導いたものです。
脱帽します。私は、Barning と Hall の業績を知ったうえで、
その逆問題(任意の原始ピタゴラス数を、{3, 4, 5}と
U, D, A の積で表すアルゴリズムを求める)が未解決
だというのを知り、それを連分数によって解決してから、
図形的な解法を思いつきました。
>もしかすると、オリジナリティがあるかもしれないとは思っています。
とのことですが、独立に解決しているのですから、充分にオリジナリティを
誇っていいと思います。
なお、岐阜東高校の亀井喜久雄先生も、Barning と Hall とは独立に
正問題を発見し、解いていらっしゃいます。個人的には、
「Barning = Hall =亀井の定理」と呼んでいます。
0128132人目の素数さん
垢版 |
2018/07/23(月) 21:33:52.46ID:Fu1mV0Fm
すでに紀元前千八百年前に、古代バビロニア人が
「奇数×奇数」の公式を発見していたようです。
「プリンプトン322」でネット検索していただければ
すぐに見つかると思いますが。
プリンプトン322は、「0 < p < q < 180」の範囲内で、
「正方形と黄金長方形の間にある長方形」を探索したものだと
いうのが確認されています。
「なんで15個なの? “正則数”って、どういう概念なの?」とか
「なんで11番は15倍されていて、15番は2倍されているの?」
あたりは、自分で考えたほうが楽しいだろうと、メソポタミアの書記の神である
ナブー様が仰っているので、答えはナイショにしておきます。
0129132人目の素数さん
垢版 |
2018/07/24(火) 00:47:34.68ID:I4orNJw7
プリンプトンの石板のピタゴラス数、素因数は2と3と5で作られてる。
0130132人目の素数さん
垢版 |
2018/07/24(火) 06:44:10.10ID:R4xS6L6u
>>129
その 2 と 3 と 5 が選ばれた理由は、当時六〇進数が使われて
いたからなんじゃないか、と考えています。
「割り算する」は、「除数の逆数を掛ける」ということと
等価です。そこで、古代バビロニア人は「逆数を取ったときに
有限小数になる数」を選んだようです。
60 = 2 * 2 * 3 * 5 なので、因数が 2, 3, 5 だけの数は、
逆数を取っても(六〇進数で表したときに)循環小数になりません。
「だったら三〇進数でもいいんじゃない?」という話には
なりましが、60 の約数には 1, 2, 3, 4, 5, 6 が出てくる
(30 だと 4 が出てこない)ので、なんとなく“美しい”と
思ったのかもしれません(単に実用的な配慮かもしれませんが)。
0131132人目の素数さん
垢版 |
2018/07/24(火) 08:13:54.19ID:R4xS6L6u
奇数 p, q で表すと、三つの項は
p*q, (q^2-p^2)/2, (p^2+q^2) /2 になります。
この三つの項を合計して整理すると、q * (p + q)
になります。
このとき p * q は長方形、(q^2-p^2)/2 は
底辺が q - p で 高さが p + q の三角形の面積となり、
長方形 q * (p + q) からこの二つを引いたものが
対角線の長さと一致します。
古代メソポタミアには数式というものが存在しなかったので、
このような形でピタゴラス数の一般式を記憶していたのでは
ないかと考えています。
まだ未解読の粘土板は何十万とあるそうなので、どこかに
この図形が描かれているかもしれません。
0132132人目の素数さん
垢版 |
2018/07/24(火) 08:29:57.53ID:R4xS6L6u
ここで、「互いに素である奇数 p, q からなる長方形」を考えます。
この長方形に対して、ユークリッドの互除法を適用することを
考えましょう。
ユークリッドの互除法は、「長方形から正方形を取り去る」という
操作ですが、p, q がともに奇数である場合、「互いに素である」
という性質は保存されますが、「ともに奇数である」という
性質は保存されません。そこで、「長方形から二つの正方形を
取り去る」ことにします。
そうなると、q < 2p のときには面積がマイナスになってしまうので、
ここで符号を反転します。
すると、p と q は互いに素なので、面積 1 の正方形が残ります。
0133132人目の素数さん
垢版 |
2018/07/24(火) 08:35:56.43ID:R4xS6L6u
>>132 つづき
この正方形は, 原始ピタゴラス数 {0, 1, 1} に相当しますが、
これは三角形にも長方形にもなりません。そこで1ステップ
戻すと、[1, 3] となり、{4, 3, 5} が出てきます。
じつは、この「逆操作」は三通りあって、これが U, D, A
それぞれの行列を掛ける操作に対応します。
すなわち、Barning = Hall = 亀井の定理の逆は、
「正方形を二個除去する互除法」に帰着します。
0134132人目の素数さん
垢版 |
2018/07/24(火) 09:13:39.70ID:R4xS6L6u
ごめんなさい。
>>119
> 三つ目のプログラムは、原始ピタゴラス数を、(奇数項,偶数項,斜辺項) の
> 順番に与えなければなりません。
{3, 4, 5} が最小だから、この順番が基本だよね? >>133 では
逆にしてました。(奇数項, 偶数項, 斜辺項)というスタイル以外に、
(短辺、長辺、斜辺)というスタイルもあるので混乱していました。
UDA 行列も、縦ベクトルに向かって右から行列を掛ける
スタンダードな方法と、横ベクトルに向かって左から行列を掛ける
「海軍式」というのがあるそうですので、たぶん形も二種類あることに
なります。
> 本来ならば、この辺の融通が利く形でアップすればいいのでしょうが、
> 面倒なので省略しました。ご了承ください。
「面倒臭がり(怠惰)」は、プログラマの三大美徳のうちの一つ(Larry Wall)だ
そうですから、よろしいんじゃないですか(笑)。(残りの二つは「短気」と
「傲慢」だそうです)
私も暇をみて改修してみようかと思っています(とはいえ言語は Java ですが)。
0135132人目の素数さん
垢版 |
2018/07/24(火) 12:43:54.91ID:avmv8LiY
>>134
ピタゴラス数、あるいは、原始ピタゴラス数から新しい(原始)ピタゴラス数を生成する
という目的においては、UDA 行列のどれを用いても、かまわないと思います。
ただ、「ナンバリング」を行う上では、「U行列を用いた場合の番号変換はこれ、D行列を用いた場合の
番号変換はこれ、...」などと、ルールを固定しなければなりません。
同時に、生成されたピタゴラス数に対しても、aなのか、bなのか、見極める手段が必要となります。

この意味において、短辺か長辺かという視点は適切ではありませんでした。
しかし、第一項(=a)を奇数項、第二項(=b)を偶数項、そして、変換式を
(a,b,c)→(a~,b~,c~)=(-a-2b+2c,-2a-b+2c,-2a-2b+3c)
及び、これのa,bの符号を反転したものに固定すれば、この性質が維持されることが、
上の式を見ていただければ、判ると思います。それ故、ナンバリングを行う際には、この方法を採用しました。

もちろん、(a,b,c)→(a~,b~,c~)=(-2a-b+2c,-a-2b+2c,-2a-2b+3c) という変換式を採用することも可能でした。
その場合、世代の偶奇で、a,bの偶奇が入れ替わるようになってしまいます。

あと、Plimpton322の話は初めて見ました。ちょっと眺めてみましたが、メソポタミア流の
タンジェントの数表なのではと思いました。
そして、その値を定めるのに参考にした直角三角形のデータが添えられているだけなのではと。
そう考えると、ピタゴラス数に関連する値が出てくるのは、至極当然な事となります。
0136132人目の素数さん
垢版 |
2018/07/24(火) 15:10:14.66ID:R4xS6L6u
>>135
> あと、Plimpton322の話は初めて見ました。ちょっと眺めてみましたが、
> メソポタミア流のタンジェントの数表なのではと思いました。

『「まぁ待つさ」と、僕は答えた。』
ファインマン『ご冗談でしょう、ファインマンさん II ― ノーベル賞
物理学者の自伝』p.144
0137132人目の素数さん
垢版 |
2018/07/24(火) 15:22:37.08ID:R4xS6L6u
申し訳ございません m(_ _)m
>>124
(都市文化発祥の地であると謂われている)古代メソポタミアは、
(ユークリッド幾何学が成立した、「公準」「公理」「定理」の
ような)「証明」「論証」のシステムは成立していなかったであろう、
という話が前提にあって、「数学的な扱いやすさ」と「数学教育的な
観点」の間のギャップについての配慮が足りなかった、という点に
ついてはお詫びします。ごめんなさいm(_ _)m

そもそもが、>>124 で「長方形」という言葉を出し忘れていたのが
問題であったと思います。

「短辺と長辺と対角線の比が、自然数の比で表される長方形」と、
はっきり言明しなければならなかったと思います。

「正方形はどうなるんだ」という意見もあると思うんですが、
その時点で「正方形の対角線は、辺長との比は無理数である」と
いうのが明らかになって以降の概念、と考えていますので、お赦しを。
0138132人目の素数さん
垢版 |
2018/07/24(火) 15:55:24.12ID:R4xS6L6u
すみません。あとひとつだけコメントを。
ピタゴラス数(あるいは、ピタゴラス数による三角形
または長方形)を、有理数の上で(直観的に分かりやすい
形で)整列するのは、かなりややこしい話になると思いますよ?
>>127 で述べたように、q/p で考えると、わりと綺麗に
整列ができると思います。
そのとき、「正方形にいちばん近い p と q の比はどこに
あるのか?」という話になって、連分数表示だと、そこに
黄金数 φ が顔を出す、というのがまた面白いんですが。
0139132人目の素数さん
垢版 |
2018/07/24(火) 19:38:39.00ID:avmv8LiY
>>127
>> このとき、二つの奇数 p と q を考えたときに、長方形 p × q を
>> 考えて、「面積が同じであるときに、正方形に近いのはどっちか?」を考えると、順序付けが可能です。
第一キーが面積の小さい順、第二キーが正方形に近い順、のような方法で、
整列するということでしょうか。そのようなアプ□−チ法もありますね。

私が、思いついていたのはもっぱら 分数の整列 を介しての方法です。
第一象限 の y<x 領域の格子点を原点に近い順に並べる。ただし、(x,y)に対し、分数y/xを与え、同じ値のものは除外とか、
Farey分数を利用するのも、ありかと考えました。
しかし、これらいずれも、番号→分数、あるいは、分数→番号 を得る手順が美しくありません。

二つの奇数p,qを用いての方法を用いた場合も、番号を与えてそれに対応する原始ピタゴラス数を答える、
あるいは、逆に原始ピタゴラス数を与えて、それが何番かを答えるという関数を作るとすると、
オイラーのφ関数の積算か、それに準ずる計算が必要となるのではないでしょうか

>>119の方法は三分木構造に沿って生成されるものなので、番号から原始ピタゴラス数を求める時も、
原始ピタゴラス数から番号を求める時も、単純な計算を、log[3](n) 回ほど繰り返すことで求めることができます。
いずれも大きなところでの計算時間は、この方法の方が早いのではと思います。

p.s.通常の書き方の「アプ□−チ」がなぜかNGワードのようで、投稿ができませんでした。遅れて申し訳ありません。
0140132人目の素数さん
垢版 |
2018/07/24(火) 20:27:46.44ID:R4xS6L6u
>>139
> 逆に原始ピタゴラス数を与えて、それが何番かを答えるという関数を
> 作るとすると、オイラーのφ関数の積算か、それに準ずる計算が
> 必要となるのではないでしょうか
本当にそうです (T_T)。
すべての自然数とすべての(正の)有理数は、
ともにアレフ・ゼロ(可算無限個)なので一対一の対応づけが可能だ、
ということは理論上は確かなんですが、その順序性を保持したまま
対応づけをしてしまうと、自然数を与えたところで有理数は「実質ゼロ」に
なってしまい、有理数を与えると自然数は「実質、無限大」という話に
なってしまいます。
そういう面倒臭いところが、無限の無限たるゆえんというか、めんどうくさい
部分なんですよ。ゲオルグ・カントールが「われ見るも、われ信ぜず」と
告白したというのも頷けます。
いまのところ、「UDAで一意に表せるんだから、三進数で表現するのが、
いちばん素直なんじゃねぇの?」という投げやりな意見が、我々の いちおうの
公式見解ということになっています。
だけど、それをすると大小の比較関係が単順序構造じゃなくて
半順序構造になってしまう(実際には、半順序構造が成立すると考えると
「木構造」ではなく「束(そく)」になってしまうので、また扱いが異なって
しまうんですが)んですよね。
それが、Barning=Hall=亀井の定理の逆問題を半世紀以上“未解決”にしていた
原因なのではないか、と思ったりはしています。
ですから、任意の原始ピタゴラス数の比較関係としては「共通の根が、
どこにあるか」で判断するしかないと考えています。
0141132人目の素数さん
垢版 |
2018/07/24(火) 20:31:43.54ID:R4xS6L6u
そうそう。そのあたりのアプローチとしては、細矢治夫先生が、
トポロジカル・インデックス(有機物のような、分子量が大きく
複雑な構造をもつ分子を、どのように検索・比較するかという指標)
によって評価しようとしていらっしゃいました。
数学的な考察に役立つかどうかはわかりませんが、ご参考までに。
0142132人目の素数さん
垢版 |
2018/07/25(水) 06:40:30.35ID:+NKwYrVS
>>140
> 「UDAで一意に表せるんだから、三進数で表現するのが、
> いちばん素直なんじゃねぇの?」
ということで、Java による逆ルートの探索プログラム(Java 版)の
ソースおよび解説は、「BackLog 四角い三角形」で検索すると
すぐ見つかるはずです。(引用およびソースの再利用は歓迎します)。
0143132人目の素数さん
垢版 |
2018/07/25(水) 16:34:08.79ID:+NKwYrVS
>>139
> p.s.通常の書き方の「アプ□−チ」がなぜかNGワードのようで、
> 投稿ができませんでした。遅れて申し訳ありません。
>>141
> そのあたりのアプローチとしては
たぶん、お使いのプロバイダを利用しているユーザの
環境に、分散型の、Dos アタックを仕掛けるマルウェアが
巣食っていたのだと思います。
しばらく(三十分以上)放っといて再アクセスすると、
だいたいなんとかなるようですよ (^_-)b~☆。
0144132人目の素数さん
垢版 |
2018/07/25(水) 22:50:22.66ID:zjqtyd5e
「長方形から正方形二つを取り除く」のような操作が、どうしてUDA行列の
話と直結するのか、不明瞭でしたが、紹介されたところを見回って、見えてきました。

UDA行列や、(-a-2b+2c)^2 + (-2a-b+2c)^2 = (-2a-2b+3c)^2 等の話は、
原始ピタゴラス三角形の辺長 a,b,c (a^2+b^2=c^2)の値そのものの話であり、操作です。

この、a,b,c が変化する様子を、a=m^2-n^2、b=2m*n、c=m^2+n^2(あるいはその半分?)
を満たす、m,n の世界で眺めたとき、m*nの長方形において、二つの正方形を取り除いたり、
追加したりする操作に対応すると言うことだったんですね。すっきりしました。


全ての原始ピタゴラス数は、単位円上の一つの有理点に対応します。
そしてこの有理点は、一つの有理数に対応可能です。
(変換方法はいくつも考えられますが、最も一般的な方法は、((1-t^2)/(1+t^2),2t/(1+t^2))を利用するもの。)

従って、全ての有理数を、何らかの有理変換を、何度か経て、1/2 or 2 (原始ピタゴラス数{3,4,5}に対応する有理数)
に到達でき、また、その逆も可能なら、それらの有理変換は、原始ピタゴラス数を整理する道具に使えると言うことですね。
0145132人目の素数さん
垢版 |
2018/07/26(木) 12:34:22.68ID:JRXvy3Hy
>>144
私の思うところのものを正当に理解して下さっていることを
感謝します。m(_ _)m
数学の初心者に対して(「あなたが数学の初心者」であるという意味ではありません。
あなたは、おそらくは数学を教える立場に立つことに向いていると、私は考えます)、
より分かりやすい形でいうと
> 従って、全ての有理数を、何らかの有理変換を、何度か経て、
> 1/2 or 2 (原始ピタゴラス数{3,4,5}に対応する有理数)
> に到達でき、また、その逆も可能なら、それらの有理変換は、
> 原始ピタゴラス数を整理する道具に使えると言うことですね。
における「有理数」が、「すべての既約分数」と同義である、
ということに対して言及(つーか、念押しというか注意喚起っつーか)
して下さると、嬉しく思います。
0146132人目の素数さん
垢版 |
2018/07/26(木) 14:17:52.60ID:JRXvy3Hy
>>144
『Ikuro's Home Page』(ttp://www.geocities.jp/ikuro_kotaro/)の
『今月のコラム(閑話休題)』のなかの、『エジプト三角形の作図』や
『ピタゴラスの小石?』なんかは、このスレと関連して
面白いかと思います。お勧めです。
0147132人目の素数さん
垢版 |
2018/07/26(木) 14:32:40.43ID:JRXvy3Hy
そうそう。小学校の算数の授業では、「分数の約分」は
教わるんですけど、「分子と分母に対する共役数を
求める方法」は現在の教育では、教えていないんですよ。
「なんで互除法を教えないのかなぁ? 分子分母の
最大公約数を求めて、それで分子と分母を割ればいい
だけじゃないの?」と思うんですが、「最大公約数」とか
「ユークリッドの互除法」を、「小学生にもわかるように
説明する」ためのノウハウが、小学校で算数を教えている先生に
伝わっていないのではないか、と思います。
(正方格子空間における)「長方形」をベースにした互除法の説明は、
たぶん小学生にも通じると思うのですが、いかがでしょうか。
0148132人目の素数さん
垢版 |
2018/07/26(木) 18:52:51.46ID:JRXvy3Hy
「ユークリッドの互除法」「連分数」
「黄金比」「白銀比」は、実用的な観点からも
教育的な観点からも、セットで教えたほうが
いいように思います。
小学校高学年から中学校にかけての年齢だったら、
充分に理解できる概念のように思うんですが、
さいきん「中高一貫教育」というのが流行りなので、
「小学校で教えられていないものを、中学校の
受験問題に出題するのは、いかがなものか?」みたいな
配慮があるのかもしれません。
その結果、「受験で出ないものは出さない」ことになり、
学ぶ機会を失っているのかもしれません。
だったら「約分・通分」と一緒に、「因数分解」「素数」
について、じっくり教えたほうがいいと思うんですけどねぇ。
0149132人目の素数さん
垢版 |
2018/07/26(木) 23:36:41.89ID:xzFiG0dr
『Ikuro's Home Page』さんには、よくお邪魔してます。大変参考にさせていただいています。

最大公約数の話ですが、「ユークリッドの互除法」と名付けられている方法があることを、
おそらく私は高校1年で習いました。ただ、a と b の公約数は、a と a-b の公約数でも
あることを、どこで教わることもなく、体得していたため、当然のことと受け止めたことを覚えています。
小学生相手には「ユークリッドの互除法」ではなく、(a と b の公約数)=(a と a-b の公約数)
を教えるだけで、ほぼ十分なのではないかと思います。これを繰り返していけば、
自動的にユークリッドの互除法にたどり着きますし。

「連分数」 、「黄金比」、「白銀比」、などを、小中学生に面白く教えることができれば、
数学好きな児童・生徒を増やせそうですよね。あと、フィボナッチ数列なんかも。
でもこれらは、学校の算数/数学の授業にはそぐわないと考えられているのではないでしょうか。
特別授業とか、地域住人参加可能な公開授業なんかの方が相性がよいと思います。

144に関連し、何か面白い有理数→有理数→有理数→...の様な変換はないかと思っていたんですが、
思いがけず、Farey分数がそのまま使えることに気づきました。
Farey分数は二分木構造そのものですから、原始ピタゴラス数を二分木構造に埋め込むことが可能です。
例の三分木構造は、一つのピタゴラス数から、一人の親と三人の子を直接見つけることができますが、
この二分木構造は、親子関係を確定させるためには、ある程度の近親者情報が必要となります。
そのため、あまり面白くはありません。
0150132人目の素数さん
垢版 |
2018/07/27(金) 08:34:11.72ID:7B8ArIq3
ユーックリッドの互除法自体は、大学生になってから
知ったのですが、「格子点を持つ長方形」の性質に
ついては、小学生のときに気づいていました。
小学生のときには病気がちで、和室に布団を敷いて
寝かされていたのですが、そのとき障子が目に入るんですよ。
で、角のところから45°の角度で格子点を辿ってゆく
(辺のところでは“反射”する)と、mとn が互いに素であるとき、
すべての升目を一度づつ通って別の数に至ることに気づきました。
このとき、辺に着いたら、隅からその点を対角線として持つ正方形
になるわけで、後にフィボナッチ螺旋を見て「あぁ、そういうことか」と
納得しました。
ですから、私にとっては「ユークリッドの互除法」と「連分数」は、
同じコインの両面、というイメージがあります。
0151132人目の素数さん
垢版 |
2018/07/27(金) 08:43:48.23ID:7B8ArIq3
>149
>>(a と b の公約数)=(a と a-b の公約数)
と約分については、a と b のそれぞれを素因数分解して
重複している素因数の積、という頭があるので、
たとえば分子分母の大きいほうから小さいほうを
取り除いていって、「上下が同じになる」か「上下が 0 」になる
というリクツがいまいち腑に落ちません。
小学校で、「約数をすべて求めよ」という場合は因数分解してから
組合せを作るというのもなかなか大変だし、そもそも「素因数分解の
一意性」だってギリシャ時代には「経験的に明らか」とされていましたが、
厳密な証明はガウスを待たなければなりません。また、「素因数分解を
行なう効率のよいプログラムは発見されていない」とかいった話も
ありますし。
このあたりのギクシャクした話が、算数嫌いの子供を生み出しているかも
しれない、とは思います。
0152132人目の素数さん
垢版 |
2018/07/27(金) 08:53:00.15ID:7B8ArIq3
そうそう。私は「ユークリッドの互除法」を「二つの実数の比を
有理数で近似する方法」として知ったのが先で、「自然数で表される
長方形から正方形を取り除く方法」だと知ったのはその後です。
遠山啓先生と銀林浩先生の子供向けの本に、「二人の承認が「異なった
長さの布の値段を決める」ために、短いほうで長い方の布を取りつくし、
残った半端な部分でもう一つの布を取りつくし …… とやっていって
連分数表示を求め、そこから元の比を計算する」という話が出てきました。
古代メソポタミアでは、同じような方法で、長方形の土地の形状比を
もとめていたのではないか、と私は考えています。
0153132人目の素数さん
垢版 |
2018/07/27(金) 09:15:13.56ID:7B8ArIq3
コンピュータを用いてユークリッドの互除法を行なうには二種類あって、
わりあいに一般的なのが「繰り返しによる方法」で、ちょっとトリッキーな
感じがするけれど慣れると自然、というのが「再帰呼び出し(リカーシブ)を
使う方法」です。私はリカーシブ派なのですが、「ベズーの公式を互除法を
使って解く」という話があり、それをプログラムで書いてみようとしたところ、
どうもリカーシブで書くとややこしいことになりそうだ、ということになって
しまいました。
実際のプログラムは、『BackLog』の『ベズーの公式。』
(2015/12/18)に掲載。関連エントリは、ちょっと前にいくつかあります。
Java がある程度読めないと while(true) みたいな制禦構造が出てきたり
インデントが変だったり(loop - until - do - repeat 構造、別名を
「n + 1 / 2」ループ」といいます)して読みにくいし、動かそうと
思うと Eclipse のような IDE があったほうがいいので面倒臭いですが、
いちおうご参考までに。
0154132人目の素数さん
垢版 |
2018/07/27(金) 09:49:38.76ID:7B8ArIq3
>149
> 「連分数」 、「黄金比」、「白銀比」、などを、小中学生に面白く教えることができれば、
> 数学好きな児童・生徒を増やせそうですよね。あと、フィボナッチ数列なんかも。
> でもこれらは、学校の算数/数学の授業にはそぐわないと考えられているのでは
> ないでしょうか。
遠山啓(とおやま・ひらく)さんという「数楽者」(「すーらくもん」と読みます。
『数学セミナー』の創刊者です)の方が、「『ひと』熟」という子供のための
キャンプのようなものをやってらっしゃって、小学生にも中学生にも、普通に
理解できたようですよ? 通称を「水道方式」といいまずが、実際の広い概念は
教具や基本思想を含めると、もうちょっと広い。ただ、遠山 啓(とおやま・けい)
という方が水理学の方がいらっしゃって、『下水道』という本を出していたのを
見て大いに気に入った、というエピソードがあります。
0155132人目の素数さん
垢版 |
2018/07/27(金) 09:58:05.95ID:7B8ArIq3
遠山さんは、「子供を教えたい」というので東工大のお辞めに
なって児童教育のほうに進まれました(たしか「山びこ学校」かな?)。
「授業が終わってから、子供たちに『これは、勉強か、遊びか?』と
訊いたら、『面白かったから、あそびだ』と答えてくれた」といって
ニコニコされていたそうです。また、「子供という、こんなに面白い
オモチャを貸してもらえないて、しかも給料まで貰えるんだから、こんなに
いい商売はない」とも。森毅センセが遠山さんにお会いしたとき「大学を
辞めるとおもしろいぞ! 森クン、キミも早く辞めたまえ」と肩を掴まれた
そうです。「まだ助教授なんで勘弁してください(T_T)」と頭を下げたとか。
0156132人目の素数さん
垢版 |
2018/07/28(土) 01:29:16.71ID:En721ByW
Farey分数を順番(※)に表示する関数、分数から(※)で定義した順番を返す関数、
順番からFarey分数を返す関数を作ってみました。
分数からピタゴラス数へ変換可能なので、それも併記してあります。

単位円上の2点(3/5,4/5)と(4/5,3/5)に対応する既約分数が異なるため、
同型のピタゴラス数が二つづつ登場してます。
「分母分子とも奇数」型か、「どちらかが偶数」型で分離できるようですが、
あえて、{3,4,5}と{4,3,5}を別々に扱うこととしたピタゴラス数のナンバリングが
完成できたと思います。

ttp://codepad.org/NkJaTo4f
0157132人目の素数さん
垢版 |
2018/07/28(土) 11:10:34.79ID:qqQucTqD
>>156
本当に余計なお節介だというのは重々承知しているし、
数学関係の専門書に出てくるプログラムがああいう感じの
C のプログラムだというのもよく知っている(数学者の
先生は、ソフトウェア開発が専門ではないので、とりあえず
動いてロジックに問題がなければ御の字、と考えていらっしゃるのは
頷ける)のだが、
K&R のスタイルは、そんなにガチガチに遵守しなくていいんだぞ?
適当な統合開発環境(IDE)があったら、乗り換えたほうが楽だ。
私はそれで Eclipse と Java に移行した。Eclipse の前身は
VisualAge C/C++ という C/C++ の IDE だったから、
たぶん C でもなんとかなると思う。
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
呂蒙って知らなかった。『男子、三日会わざれば刮目(かつもく)して見よ』
みたいな話じゃなくて、「喉元過ぎれば熱さを忘れる」とか「ニワトリは
三歩歩くと忘れる」程度の話。

ちなみに、ナメクジは思い出した瞬間に冷やすと忘れる、という話が
あるので、「トラウマとかがあった場合、思い出した瞬間に冷やしたら
どうだろう?」みたいな話が昔あった。
0171132人目の素数さん
垢版 |
2018/07/30(月) 12:27:45.11ID:dQ07oWjc
>>170
日経サイエンス、一九九〇年七月号、P.82、
『冷やすと消えるナメクジの記憶』。
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 と 黄金比の間だって気がつかなかったのか、
そっちの方が不思議に思うんだがなぁ。
■ このスレッドは過去ログ倉庫に格納されています

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