Quantcast
Channel: 円周率近似値の日に生まれて理系じゃないわけないだろ! - knifeのblog
Viewing all articles
Browse latest Browse all 5376

3個のアイゼンシュタイン三角形から整数三角形を作る

$
0
0

午後のひとときに、プログラミング問題でも考えてみる。



問題
図のような三角形が存在する。
各点間の距離がすべて既約な整数比となるものを漏れなく探すプログラムを作れ。

点Oを中心に360度を3等分していることから、⊿AOB、⊿BOC、⊿COAは、それぞれアイゼンシュタイン三角形である。

2点間の距離なので、BC=a、CA=b、AB=c、OB=d、OC=e、OA=f、とする。
(a, b, c, d, e, f, g)

自分としては、既約な100組を求めてみようかと思う。
gcd(a, b, c, d, e, f, g) = 1
既約の判定はユークリッドの互除法を使うことになるだろう。

また、(a, b, c)または(d, e, f)は入れ替え可能なので、
a > b > c または d > e > f のどちらかを使って余計な計算を省きたいところである。
外周の方が大きい値になるので、小さい値で済むであろう、d > e > f で考えることにする。

基本的な話しだが、余弦定理を使うことになるのだろうか、それとも互いに素なm、nから求めてみるのが良いのか、…
余弦定理
z2=x2+y2-2xy・cos(120˚)
z2=x2+y2-2xy・(-1/2)
z2=x2+y2+xy
互いに素なm>n
x=m2-n2
y=2mn+n2
z=m2+mn+n2

取り敢えず、今回は、
gcd(a, b, c, d, e, f)=1
d > e > f
という条件で d、e、f の3重ネストで回して100組探してみました。

 

No.BC=aCA=bAB=cOB=dOC=eOA=f
1511455399325264195
2665616511440325264
32045174410511520805384
434412405208921451824455
544594056123538641015360
656814901191146691656435
7622356722917492820651272
856245439159150161064765
9121031171311323720867656307
10101018456339581843105520
11155231354512728940585126120
12175011269194351170484151785
131750116856138891170484157616
141829616219127351237686405985
1519201130659971126009499885
16189281683588271480065283515
1722699176891348015211108804200
18199691754998161529572963864
19202802003327431932018001357
20229792249680292006450054256
2124843221925563218405187688
2236005266571808824955163203128
2327815263533913259353440817
24288612781672012604049913264
2544593358152703730160210639425
2637539332711474430429115205096
27504014455540291313952674119600
2844135371282247732640175757752
29577154521944099339153272517424
30465434629728995357281690516575
3162797406053515238955334883120
32583594906438779389762811916120
33580154754435941393602726513464
34625435560843453424322939320520
35905848794584721541205045647355
36762656416141021554403153514841
37761717536551216565253009629040
38608536084093735796054235400
39732536423231155580722422510920
40846936545346213583773876012383
4187935596414398958400427352409
42842806864748883585203808017043
4368176609611774559024156003705
44626996226189715973155654784
45911178080862725619924262529400
4672751674152003963665156316960
47990017465958664651494877616320
4879507683552602765520229335355
49986519724579531665554678445045
5092680731513674170720342004641
511053607771755387717604920010787
52950957784342123719953580510608
5397952776854338772960383688715
5411948311284098553767606090352800
5512043211367790517818405644847957
561011799234440295830962957516320
571076539969554888841753712825920
5812697910427581571848756110431525
591112999456946136872613808013224
6096520882391621987720156801029
611369019764177105891996842515120
6297976943351621991200123765985
6310866110532940355934392580020705
6413681911828987224948296201637720
6514127211465387825951286720032175
661340721009555873797600552726405
67102085101503108679851568005733
6812669710896556017985154440818525
6912716710864054223993604395316640
7011170910502419939102336168355184
7111188010889916759105280122006909
721738721288551122871088009172833495
731699761326411103711094808633638019
741710511450551234811100558700954320
75113285112339632111096045152709
7615534411233967971110960665762709
771823111382951226011133059699940800
781870571661171516031158439995774480
79198499196935194456116025113176111360
8012523312002515817117975134334000
811853491571391289291216569166555759
82173128131537861651219927616017365
83141329135800491791222003257124000
8421160314904313715212820511603235328
85157135153273760331285354664041097
86154451141949513761312853889619344
8714478114050417745137344138756120
8821685517665915269613765511232061544
8918133714063767525139113659753000
9021310915684912028014114110400027720
91202407150817975521426238904015232
92177191176344850711470164972548504
9323301617485913539115417611388035819
9423431217736512223316224010639227125
9524791918512914218416445912069636040
96259747238088210665164808134615108160
97189735182039336311755602572512331
9825669620915514135118172011193646905
99289509275419220549196416136059118405
10026860322893513862719932510612850715


No.100のd=199325であることから、
アイゼンシュタイン三角形の余弦定理
a2=d2+e2+de
に登場する平方数d2=39730455625が、16進数で0x9401ea449と9桁となっていることから、
32ビット整数型では足りないことがわかる。
つまり、64ビット整数型を使う必要がある。

100組検索してみて、いくつかの特徴が見えてくる。

例えば、d、e、fのいずれか1個か2個が約数の3、5、8を、100組までは必ず持っている。
これに関しては、何らかの証明をしないことには、プログラムに組み込むことは出来ないだろうが、証明できれば枝刈りの材料となるだろう。

例えば、No.1と2、No.12と13など。
交換の必要がなく解りやすいのは、No.12と13ですね。
a、d、eの値が等しく、他が等しくないということ。
これは⊿BOCは変化せずに、OAの長さの違いだけということです。
OAの延長線上にまだまだ条件を満たす点が複数存在する可能性を秘めているということになります。

100組検索するのに、半日も掛かっているので、高速化を考えねば、もっと多くのサンプルをみることも出来ない。


ではでは


Viewing all articles
Browse latest Browse all 5376

Trending Articles