filterとmapでピタゴラス
ピタゴラス円
このワークシートはMath by Codeの一部です。
ピタゴラスの定理はもともと、直角三角形の3辺になりたつ定理だけど、
整数に限定したものをピタゴラス数(の組)というね。
<ピタゴラス型の組>
奇数の平方数は奇数なので、連続する整数の和に分解できるね。
たとえば、
32=9=4+5 から、3,4,5
52=25=12+13 から、5,12,13
72=49=24+25 から、7,24,25
92=81=40+41 から、9, 40, 41
112=121=60+61 から、11,60,61
132=169=84+85 から、13, 84, 85
100を超えないピタゴラス型は6組あるね。
和と差の公式を使うと、たとえば、252-242=(25+24)・(25-24)=49・1=49=72と平方数の差が平方数になる組が作れることがわかるね。
このピタゴラス型を一般化してみると、こうなる。
A=2n+1とすると、A2=(2n+1)2=4n2+4n+1=2n(n+1)+ {2n(n+1)+1}=B+(B+1)=B+Cとおけるね。
C2-B2=(C+B)(C-B)=A2
AとCが奇数で、Bのみ偶数。BとCが連続数になる。
これがピタゴラス型の組だ。
<プラトン型の組>
ピタゴラス型では偶数が4の倍数で、残りが奇数になっていた。
しかし、4の倍数は最小ではなかった。
プラトン型では4の倍数をもとにして作る。
A=4mとすると、B=Am-1, C=Am+1とすると、BとCは差が2の奇数になる。
C2-B2=(C+B)(C-B)=(Am+1+Am-1)・2=4mA=A2になる。
たとえば、
4・1=4 , B,C=4・1±1=3,5 から、4,3,5
4・2=8 , B,C=8・2±1=15,17 から、8,15,17
4・3=12, B,C=12・3±1=35, 37 から、12,36,37
4・4=16, B,C=16・4±1=63, 65 から、16,63,65
100をこえないプラトン型は4個で、最初の3,4,5はピタゴラス型と同じ
<ピタゴラス数の一般項>
最大が100以下のピタゴラス数の組は、プラトン型、ピタゴラス型をまぜて、合計9組あった。
一般的にはどうなのだろうか?
多項式x2+y2=z2を満たす整数x,y,zの偶数、奇数を考えてみることをスタートにする。
x,y,zがどの2数も互いに素とすると、3数がすべて偶数というのはありえない。
だから、x、y、zを2で割ったあまりで分類すると、0+0≡0の場合はないので、
0+1=1か、1+1≡0のどちらかとなる。
つまり、(xとy,z)は偶数と奇数、奇数か奇数と奇数、偶数
次に4で割ったあまりで分類してみよう。
x,yともに奇数でzが偶数のとき、
zは偶数の2乗だから0(mod4)となる。
一方で、奇数の2乗は1の1乗も3の2乗も1(mod 4)となるため、x2乗とy2乗の和は2(mod 4)。
だから、剰余が一致しないからありえない。
x、yの片方だけ偶数でzが奇数なら、x2乗とy2乗の和は1+0=1(mod 4)となり、剰余が一致する。
つまり、ピタゴラス数の組はx,yは偶数と奇数1つずつで、zは必ず奇数となる。
そこで、yを偶数としたら、z,xともに奇数となる。
だから、z+x,z-xともに偶数なので、それぞれ2m,2n
m>n>0とおける。
和差算をして、z = (2m+2n)/2 = m + n, x = (2m-2n)/2= m - n
互いに素なz,xが両方とも奇数になるためには、mとnの偶数・奇数は同じになれないし、互いに素。
y2=z2-x2=(z+x)(z-x)=2m・2n=4mn
となるが、yは完全な平方数なので、m=a2, n=b2 (a>b>0)とおける。互いに素なmとnの偶数・奇数が一致しないためには、a,bの片方が偶数、他方が奇数にで互いに素。
x=a2- b2,z=a2+ b2。y2=4a2b2からy=2ab。
まとめると、
a、bが互いに素な偶数と奇数とするとき、
(x,y,z)=( a2-b2, 2ab, a2+b2)を一般項とできる。
他の一般化もある。
yを奇数としたら、xが偶数、zが奇数ですね。
だから、xとzが互いに素になるためには、z+x,z-xともに奇数で互いに素だね。
y2=z2-x2=(z+x)(z-x)
となるが、yは完全な平方数なので、z+x=s2, z-x=t2 (s,tは互いに素な奇数で、s>t>0)とおけるね。
x=(s2- t2)/2, z=(s2+ t2)/2, y2=s2t2からy=st。
まとめると、
s,tを互いに素な奇数とするとき、
(x,y,z)=( (s2-t2)/2, st, (s2+t2)/2 ) と一般項ができた。
質問:素なピタゴラス数を100以下が何組あるのだろうか。
s,tに互いに素な奇数の組を作りリストMとする。
Mからピタゴラス数の組xyzを作る。
xyzともに100未満になる組に限定したunder100にする。
タプルをリストにしてから小さい順にならべたsortedにする。
中と大の差が1か2になっていると、ピタゴラス型かプラトン型を判断して999を
4番めに目印としてくっつけよう。
目印がないのが、2つの型から見ると想定外のタイプになるね。
16−9=7だから、想定外がかなり多いといえるね。
#[IN]julia
#============================================
M=[(s,t) for s in 1:2:15 for t in 1:2:s-2 if gcd(s,t)==1]
xyz=[((s^2-t^2)÷2, s*t,(s^2 +t^2)÷2) for (s,t) in M]
under100=filter(x->x[1]<100 && x[2] <100 && x[3]<100 , xyz)
sorted=map(x -> sort(collect(x)),under100)
pytha = map(x -> x[3]-x[2]<3 ? push!(x,999) : x ,sorted)
#============================================
[OUT]
16-element Vector{Vector{Int64}}:
[3, 4, 5, 999]
[5, 12, 13, 999]
[8, 15, 17, 999]
[7, 24, 25, 999]
[20, 21, 29]
[12, 35, 37, 999]
[9, 40, 41, 999]
[28, 45, 53]
[16, 63, 65, 999]
[11, 60, 61, 999]
[33, 56, 65]
[48, 55, 73]
[36, 77, 85]
[13, 84, 85, 999]
[39, 80, 89]
[65, 72, 97]
質問:2つの型が占める割合は、範囲を広げるとどうなっていくのだろうか?
奇数s,tを1000以下まで準備しといて、
それで、ピタゴラス数の組に対して2型の占める割合を調べていく。
調べ方、100,200,300,.....と100単位で上限を上げていくやり方にしてみよう。
[IN]Julia
#=============================================
M=[(s,t) for s in 1:2:1000 for t in 1:2:s-2 if gcd(s,t)==1]
xyz=[((s^2-t^2)÷2, s*t,(s^2 +t^2)÷2) for (s,t) in M]
for i in 1:10
lim=100*i
underlim=filter(x->x[1] sort(collect(x)),underlim)
pytha = filter(x -> x[3]-x[2]<3 ,sorted)
println(lim,":", length(pytha)/length(sorted))
end
#=============================================
[OUT]
100:0.5625
200:0.46875
300:0.3829787234042553
400:0.3333333333333333
500:0.3125
600:0.28421052631578947
700:0.26785714285714285
800:0.25
900:0.2357142857142857
1000:0.22151898734177214
予想通りだ。
範囲を広げると、想定内の割合は減っていく。
やはり、2つの型は小さな直角三角形から見つかったタイプだったんだろうね。
ピタゴラス数と型
単位円でピタゴラス有理点
2.ピタゴラスと円
多項式の両辺をz2で割ることで、(x/z)2+(y/z)2=1ともかける。
すると、ピタゴラス数から作られた有理数の組(x/z, y/z)は、単位円周上の有理点に対応する。
ピタゴラス有理点の座標はたとえば、(x,y)=( )とかける。
ここでm2で割ってみよう。(x,y)=
t=n/mとすると、(n/m)2=t2なるから、(x,y)= となるね。
つまり、tが有理数のとき、ピタゴラス有理点はtを使った座標になる。
点A(-1,0)と(x,y)= を結ぶ直線を考えよう。
x座標の差は
y座標の差は
だから、傾きΔy/Δx=2t/2=tとなる。
ということは、ピタゴラス有理点は、
点A(-1,0)を通る傾きtの直線と単位円の交点だということがわかるね。
このプロセスは逆転可能だから、
A(-1,0)を通る傾きtの直線y=t(x+1)と単位円の交点がピタゴラス有理点を表すことになるね。