午後のひとときに、プログラミング問題でも考えてみる。
問題
図のような三角形が存在する。
各点間の距離がすべて既約な整数比となるものを漏れなく探すプログラムを作れ。
点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=a | CA=b | AB=c | OB=d | OC=e | OA=f |
1 | 511 | 455 | 399 | 325 | 264 | 195 |
2 | 665 | 616 | 511 | 440 | 325 | 264 |
3 | 2045 | 1744 | 1051 | 1520 | 805 | 384 |
4 | 3441 | 2405 | 2089 | 2145 | 1824 | 455 |
5 | 4459 | 4056 | 1235 | 3864 | 1015 | 360 |
6 | 5681 | 4901 | 1911 | 4669 | 1656 | 435 |
7 | 6223 | 5672 | 2917 | 4928 | 2065 | 1272 |
8 | 5624 | 5439 | 1591 | 5016 | 1064 | 765 |
9 | 12103 | 11713 | 11323 | 7208 | 6765 | 6307 |
10 | 10101 | 8456 | 3395 | 8184 | 3105 | 520 |
11 | 15523 | 13545 | 12728 | 9405 | 8512 | 6120 |
12 | 17501 | 12691 | 9435 | 11704 | 8415 | 1785 |
13 | 17501 | 16856 | 13889 | 11704 | 8415 | 7616 |
14 | 18296 | 16219 | 12735 | 12376 | 8640 | 5985 |
15 | 19201 | 13065 | 9971 | 12600 | 9499 | 885 |
16 | 18928 | 16835 | 8827 | 14800 | 6528 | 3515 |
17 | 22699 | 17689 | 13480 | 15211 | 10880 | 4200 |
18 | 19969 | 17549 | 9816 | 15295 | 7296 | 3864 |
19 | 20280 | 20033 | 2743 | 19320 | 1800 | 1357 |
20 | 22979 | 22496 | 8029 | 20064 | 5005 | 4256 |
21 | 24843 | 22192 | 5563 | 21840 | 5187 | 688 |
22 | 36005 | 26657 | 18088 | 24955 | 16320 | 3128 |
23 | 27815 | 26353 | 3913 | 25935 | 3440 | 817 |
24 | 28861 | 27816 | 7201 | 26040 | 4991 | 3264 |
25 | 44593 | 35815 | 27037 | 30160 | 21063 | 9425 |
26 | 37539 | 33271 | 14744 | 30429 | 11520 | 5096 |
27 | 50401 | 44555 | 40291 | 31395 | 26741 | 19600 |
28 | 44135 | 37128 | 22477 | 32640 | 17575 | 7752 |
29 | 57715 | 45219 | 44099 | 33915 | 32725 | 17424 |
30 | 46543 | 46297 | 28995 | 35728 | 16905 | 16575 |
31 | 62797 | 40605 | 35152 | 38955 | 33488 | 3120 |
32 | 58359 | 49064 | 38779 | 38976 | 28119 | 16120 |
33 | 58015 | 47544 | 35941 | 39360 | 27265 | 13464 |
34 | 62543 | 55608 | 43453 | 42432 | 29393 | 20520 |
35 | 90584 | 87945 | 84721 | 54120 | 50456 | 47355 |
36 | 76265 | 64161 | 41021 | 55440 | 31535 | 14841 |
37 | 76171 | 75365 | 51216 | 56525 | 30096 | 29040 |
38 | 60853 | 60840 | 9373 | 57960 | 5423 | 5400 |
39 | 73253 | 64232 | 31155 | 58072 | 24225 | 10920 |
40 | 84693 | 65453 | 46213 | 58377 | 38760 | 12383 |
41 | 87935 | 59641 | 43989 | 58400 | 42735 | 2409 |
42 | 84280 | 68647 | 48883 | 58520 | 38080 | 17043 |
43 | 68176 | 60961 | 17745 | 59024 | 15600 | 3705 |
44 | 62699 | 62261 | 8971 | 59731 | 5565 | 4784 |
45 | 91117 | 80808 | 62725 | 61992 | 42625 | 29400 |
46 | 72751 | 67415 | 20039 | 63665 | 15631 | 6960 |
47 | 99001 | 74659 | 58664 | 65149 | 48776 | 16320 |
48 | 79507 | 68355 | 26027 | 65520 | 22933 | 5355 |
49 | 98651 | 97245 | 79531 | 66555 | 46784 | 45045 |
50 | 92680 | 73151 | 36741 | 70720 | 34200 | 4641 |
51 | 105360 | 77717 | 55387 | 71760 | 49200 | 10787 |
52 | 95095 | 77843 | 42123 | 71995 | 35805 | 10608 |
53 | 97952 | 77685 | 43387 | 72960 | 38368 | 8715 |
54 | 119483 | 112840 | 98553 | 76760 | 60903 | 52800 |
55 | 120432 | 113677 | 90517 | 81840 | 56448 | 47957 |
56 | 101179 | 92344 | 40295 | 83096 | 29575 | 16320 |
57 | 107653 | 99695 | 54888 | 84175 | 37128 | 25920 |
58 | 126979 | 104275 | 81571 | 84875 | 61104 | 31525 |
59 | 111299 | 94569 | 46136 | 87261 | 38080 | 13224 |
60 | 96520 | 88239 | 16219 | 87720 | 15680 | 1029 |
61 | 136901 | 97641 | 77105 | 89199 | 68425 | 15120 |
62 | 97976 | 94335 | 16219 | 91200 | 12376 | 5985 |
63 | 108661 | 105329 | 40355 | 93439 | 25800 | 20705 |
64 | 136819 | 118289 | 87224 | 94829 | 62016 | 37720 |
65 | 141272 | 114653 | 87825 | 95128 | 67200 | 32175 |
66 | 134072 | 100955 | 58737 | 97600 | 55272 | 6405 |
67 | 102085 | 101503 | 10867 | 98515 | 6800 | 5733 |
68 | 126697 | 108965 | 56017 | 98515 | 44408 | 18525 |
69 | 127167 | 108640 | 54223 | 99360 | 43953 | 16640 |
70 | 111709 | 105024 | 19939 | 102336 | 16835 | 5184 |
71 | 111880 | 108899 | 16759 | 105280 | 12200 | 6909 |
72 | 173872 | 128855 | 112287 | 108800 | 91728 | 33495 |
73 | 169976 | 132641 | 110371 | 109480 | 86336 | 38019 |
74 | 171051 | 145055 | 123481 | 110055 | 87009 | 54320 |
75 | 113285 | 112339 | 6321 | 110960 | 4515 | 2709 |
76 | 155344 | 112339 | 67971 | 110960 | 66576 | 2709 |
77 | 182311 | 138295 | 122601 | 113305 | 96999 | 40800 |
78 | 187057 | 166117 | 151603 | 115843 | 99957 | 74480 |
79 | 198499 | 196935 | 194456 | 116025 | 113176 | 111360 |
80 | 125233 | 120025 | 15817 | 117975 | 13433 | 4000 |
81 | 185349 | 157139 | 128929 | 121656 | 91665 | 55759 |
82 | 173128 | 131537 | 86165 | 121992 | 76160 | 17365 |
83 | 141329 | 135800 | 49179 | 122200 | 32571 | 24000 |
84 | 211603 | 149043 | 137152 | 128205 | 116032 | 35328 |
85 | 157135 | 153273 | 76033 | 128535 | 46640 | 41097 |
86 | 154451 | 141949 | 51376 | 131285 | 38896 | 19344 |
87 | 144781 | 140504 | 17745 | 137344 | 13875 | 6120 |
88 | 216855 | 176659 | 152696 | 137655 | 112320 | 61544 |
89 | 181337 | 140637 | 67525 | 139113 | 65975 | 3000 |
90 | 213109 | 156849 | 120280 | 141141 | 104000 | 27720 |
91 | 202407 | 150817 | 97552 | 142623 | 89040 | 15232 |
92 | 177191 | 176344 | 85071 | 147016 | 49725 | 48504 |
93 | 233016 | 174859 | 135391 | 154176 | 113880 | 35819 |
94 | 234312 | 177365 | 122233 | 162240 | 106392 | 27125 |
95 | 247919 | 185129 | 142184 | 164459 | 120696 | 36040 |
96 | 259747 | 238088 | 210665 | 164808 | 134615 | 108160 |
97 | 189735 | 182039 | 33631 | 175560 | 25725 | 12331 |
98 | 256696 | 209155 | 141351 | 181720 | 111936 | 46905 |
99 | 289509 | 275419 | 220549 | 196416 | 136059 | 118405 |
100 | 268603 | 228935 | 138627 | 199325 | 106128 | 50715 |
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組検索するのに、半日も掛かっているので、高速化を考えねば、もっと多くのサンプルをみることも出来ない。
ではでは