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

マーティン・ガードナー その6

$
0
0

前記事にて、今までのプログラムでは限界を感じていて、1000桁以上の検索をしていない。

もう葉ノードを追いかけるのはだめなのじゃないか?

なにか、まだまだ無駄な検索をしているような気がする。


そこで、葉っぱを追いかけるのをやめて、枝探しをしてみる。


枝ノードの特徴として、素因数分解すると、

 2^a*3^b*5^c*7^d

とすることができる。

また、a>0かつc>0は、根ノード直上の枝ノード(根ノードの子ノード)である。

つまり検索する枝ノードは、

 2^a*3^b*5^0*7^d (5なし葉ノード直下枝ノード系)
 2^0*3^b*5^c*7^d (2なし葉ノード直下枝ノード系)

の2つだけである。

ならば、この(a,b,c,d)だけを変化させて葉ノード直下枝ノードを生成し、そこから根ノード方向へ粘度をカウントさせる。

この(a,b,c,d)から最小の葉ノードの作成はすごく簡単である。

但し、この葉ノード直下枝ノードが今まで求めてきた最小の葉ノードだけを求めているわけではないことに注意が必要。

64ビット正整数全域の 2^a*3^b*7^d を検査するプログラムを書いてみたが、これが思いの外、速かった。

合成数(枝ノードの粘度:それぞれの冪数)

4996238671872(10:2^19*3^4*7^6)
937638166841712(10:2^4*3^20*7^5)
438939648(9:2^12*3^7*7^2)
231928233984(9:2^33*3^3*7^0)
4478976(8:2^11*3^7*7^0)
784147392(8:2^6*3^6*7^5)
19421724672(8:2^21*3^3*7^3)
249143169618(8:2^1*3^2*7^12)
717233481216(8:2^9*3^5*7^8)
338688(7:2^8*3^3*7^2)
826686(7:2^1*3^10*7^1)
2239488(7:2^10*3^7*7^0)
3188646(7:2^1*3^13*7^0)
6613488(7:2^4*3^10*7^1)
14224896(7:2^9*3^4*7^3)
3416267673274176(7:2^6*3^27*7^1)
6499837226778624(7:2^24*3^18*7^0)
27648(6:2^10*3^3*7^0)
47628(6:2^2*3^5*7^2)
64827(6:2^0*3^3*7^4)
84672(6:2^6*3^3*7^2)
134217728(6:2^27*3^0*7^0)
914838624(6:2^5*3^5*7^6)
1792336896(6:2^10*3^6*7^4)
3699376128(6:2^23*3^2*7^2)
48814981614(6:2^1*3^20*7^1)
134481277728(6:2^5*3^6*7^8)
147483721728(6:2^16*3^8*7^3)
1438916737499136(6:2^24*3^6*7^6)
2688(5:2^7*3^1*7^1)
18816(5:2^7*3^1*7^2)
26244(5:2^2*3^8*7^0)
98784(5:2^5*3^2*7^3)
222264(5:2^3*3^4*7^3)
262144(5:2^18*3^0*7^0)
331776(5:2^12*3^4*7^0)
333396(5:2^2*3^5*7^3)
666792(5:2^3*3^5*7^3)
688128(5:2^15*3^1*7^1)
1769472(5:2^16*3^3*7^0)
2939328(5:2^6*3^8*7^1)
3687936(5:2^9*3^1*7^4)
4214784(5:2^12*3^1*7^3)
4917248(5:2^11*3^0*7^4)
13226976(5:2^5*3^10*7^1)
19361664(5:2^7*3^2*7^5)
38118276(5:2^2*3^4*7^6)
71663616(5:2^15*3^7*7^0)
111476736(5:2^16*3^5*7^1)
133413966(5:2^1*3^4*7^7)
161414428(5:2^2*3^0*7^9)
169869312(5:2^21*3^4*7^0)
184473632(5:2^5*3^0*7^8)
267846264(5:2^3*3^14*7^1)
368947264(5:2^6*3^0*7^8)
476171136(5:2^7*3^12*7^1)
1783627776(5:2^20*3^5*7^1)
3794886144(5:2^9*3^2*7^7)
4444263936(5:2^9*3^11*7^2)
11329339392(5:2^19*3^2*7^4)
23612624896(5:2^12*3^0*7^8)
149824733184(5:2^22*3^6*7^2)
279988627968(5:2^9*3^13*7^3)
743797684224(5:2^11*3^2*7^9)
2322868617216(5:2^14*3^10*7^4)
4668421498272(5:2^5*3^11*7^7)
13884223438848(5:2^14*3^1*7^10)
42176144114496(5:2^6*3^23*7^1)
727326941773824(5:2^39*3^3*7^2)
36381499733311488(5:2^35*3^2*7^6)
11664241186637348864(5:2^27*3^8*7^17)
11696697894336724992(5:2^24*3^11*7^17)
12766499616836914432(5:2^8*3^23*7^17)
13219422834691127296(5:2^11*3^12*7^13)
378(4:2^1*3^3*7^1)
384(4:2^7*3^1*7^0)
686(4:2^1*3^0*7^3)
768(4:2^8*3^1*7^0)
1764(4:2^2*3^2*7^2)
2646(4:2^1*3^3*7^2)
4374(4:2^1*3^7*7^0)
6144(4:2^11*3^1*7^0)
6174(4:2^1*3^2*7^3)
6272(4:2^7*3^0*7^2)
7168(4:2^10*3^0*7^1)
8232(4:2^3*3^1*7^3)
8748(4:2^2*3^7*7^0)
16128(4:2^8*3^2*7^1)
21168(4:2^4*3^3*7^2)
23328(4:2^5*3^6*7^0)
27216(4:2^4*3^5*7^1)
28672(4:2^12*3^0*7^1)
32928(4:2^5*3^1*7^3)
34992(4:2^4*3^7*7^0)
49392(4:2^4*3^2*7^3)
67228(4:2^2*3^0*7^5)
96768(4:2^9*3^3*7^1)
112896(4:2^8*3^2*7^2)
139968(4:2^6*3^7*7^0)
148176(4:2^4*3^3*7^3)
163296(4:2^5*3^6*7^1)
214326(4:2^1*3^7*7^2)
236196(4:2^2*3^10*7^0)
393216(4:2^17*3^1*7^0)
642978(4:2^1*3^8*7^2)
691488(4:2^5*3^2*7^4)
774144(4:2^12*3^3*7^1)
777924(4:2^2*3^4*7^4)
941192(4:2^3*3^0*7^6)
979776(4:2^6*3^7*7^1)
1166886(4:2^1*3^5*7^4)
1361367(4:2^0*3^4*7^5)
1382976(4:2^6*3^2*7^4)
1411788(4:2^2*3^1*7^6)
1492992(4:2^11*3^6*7^0)
1741824(4:2^10*3^5*7^1)
1778112(4:2^6*3^4*7^3)
1843968(4:2^8*3^1*7^4)
1882384(4:2^4*3^0*7^6)
2117682(4:2^1*3^2*7^6)
2667168(4:2^5*3^5*7^3)
3111696(4:2^4*3^4*7^4)
3211264(4:2^16*3^0*7^2)
3764768(4:2^5*3^0*7^6)
3779136(4:2^6*3^10*7^0)
4148928(4:2^6*3^3*7^4)
4644864(4:2^13*3^4*7^1)
4782969(4:2^0*3^14*7^0)
6223392(4:2^5*3^4*7^4)
7112448(4:2^8*3^4*7^3)
9437184(4:2^20*3^2*7^0)
9483264(4:2^10*3^3*7^3)
9633792(4:2^16*3^1*7^2)
11943936(4:2^14*3^6*7^0)
13716864(4:2^7*3^7*7^2)
14823774(4:2^1*3^2*7^7)
16777216(4:2^24*3^0*7^0)
22478848(4:2^16*3^0*7^3)
39337984(4:2^14*3^0*7^4)
46294416(4:2^4*3^10*7^2)
69441624(4:2^3*3^11*7^2)
74317824(4:2^17*3^4*7^1)
113799168(4:2^12*3^4*7^3)
116169984(4:2^8*3^3*7^5)
138883248(4:2^4*3^11*7^2)
182284263(4:2^0*3^12*7^3)
226492416(4:2^23*3^3*7^0)
813189888(4:2^8*3^3*7^6)
891813888(4:2^19*3^5*7^1)
933897762(4:2^1*3^4*7^8)
1162261467(4:2^0*3^19*7^0)
1194891264(4:2^11*3^5*7^4)
1296243648(4:2^6*3^10*7^3)
1811939328(4:2^26*3^3*7^0)
1888223232(4:2^18*3^1*7^4)
2113929216(4:2^25*3^2*7^1)
2268426384(4:2^4*3^10*7^4)
2633637888(4:2^13*3^8*7^2)
2646497448(4:2^3*3^9*7^5)
2832334848(4:2^17*3^2*7^4)
3281116734(4:2^1*3^14*7^3)
3288334336(4:2^26*3^0*7^2)
3969746172(4:2^2*3^10*7^5)
4182119424(4:2^10*3^5*7^5)
6772211712(4:2^14*3^10*7^1)
8749644624(4:2^4*3^13*7^3)
9172942848(4:2^22*3^7*7^0)
16911433728(4:2^28*3^2*7^1)
26149137336(4:2^3*3^4*7^9)
26248933872(4:2^4*3^14*7^3)
41841412812(4:2^2*3^21*7^0)
83364669612(4:2^2*3^11*7^6)
94911683664(4:2^4*3^1*7^11)
128421199872(4:2^23*3^7*7^1)
139994313984(4:2^8*3^13*7^3)
171228266496(4:2^25*3^6*7^1)
288947699712(4:2^21*3^9*7^1)
462838344192(4:2^9*3^17*7^1)
728618139648(4:2^15*3^3*7^7)
731398864896(4:2^16*3^13*7^1)
867763964928(4:2^10*3^1*7^10)
913217421312(4:2^29*3^5*7^1)
944961619392(4:2^6*3^16*7^3)
1121144263281(4:2^0*3^4*7^12)
6347497291776(4:2^14*3^18*7^0)
8681834878164(4:2^2*3^17*7^5)
17279298183168(4:2^13*3^16*7^2)
37347371986176(4:2^8*3^11*7^7)
38919722282469(4:2^0*3^9*7^11)
61737492466944(4:2^8*3^15*7^5)
116891829927936(4:2^36*3^5*7^1)
139214922448896(4:2^31*3^3*7^4)
142344486386424(4:2^3*3^26*7^1)
194379128143872(4:2^15*3^1*7^11)
246949969867776(4:2^10*3^15*7^5)
479638912499712(4:2^24*3^5*7^6)
484334321737392(4:2^4*3^7*7^12)
817314167931849(4:2^0*3^10*7^12)
2963399638413312(4:2^12*3^16*7^5)
3487439916467388(4:2^2*3^26*7^3)
9299839777246368(4:2^5*3^25*7^3)
12971141321962887(4:2^0*3^32*7^1)
31763939874242688(4:2^7*3^16*7^8)
266688163813392384(4:2^17*3^1*7^14)
348327397633818624(4:2^23*3^1*7^12)
1339176927923476992(4:2^9*3^27*7^3)
2269814212194729984(4:2^55*3^2*7^1)
3382673681392861184(4:2^18*3^6*7^15)
8864372626936117641(4:2^0*3^22*7^10)
9724363321928318976(4:2^21*3^21*7^8)
11231718727873462272(4:2^30*3^21*7^0)
11394932833429487616(4:2^33*3^1*7^19)
13936244461118947328(4:2^39*3^18*7^2)
17413648727771799744(4:2^6*3^9*7^20)
17739137492699764128(4:2^5*3^31*7^17)
17918266834968117248(4:2^20*3^14*7^9)
49(3:2^0*3^0*7^2)
96(3:2^5*3^1*7^0)
98(3:2^1*3^0*7^2)
147(3:2^0*3^1*7^2)
168(3:2^3*3^1*7^1)
189(3:2^0*3^3*7^1)
196(3:2^2*3^0*7^2)
288(3:2^5*3^2*7^0)
294(3:2^1*3^1*7^2)
336(3:2^4*3^1*7^1)
343(3:2^0*3^0*7^3)
392(3:2^3*3^0*7^2)
448(3:2^6*3^0*7^1)
486(3:2^1*3^5*7^0)
648(3:2^3*3^4*7^0)
672(3:2^5*3^1*7^1)
729(3:2^0*3^6*7^0)
784(3:2^4*3^0*7^2)
864(3:2^5*3^3*7^0)
882(3:2^1*3^2*7^2)
896(3:2^7*3^0*7^1)
972(3:2^2*3^5*7^0)
1344(3:2^6*3^1*7^1)
1792(3:2^8*3^0*7^1)
1944(3:2^3*3^5*7^0)
2268(3:2^2*3^4*7^1)
2744(3:2^3*3^0*7^3)
3136(3:2^6*3^0*7^2)
3888(3:2^4*3^5*7^0)
3969(3:2^0*3^4*7^2)
7938(3:2^1*3^4*7^2)
8192(3:2^13*3^0*7^0)
11664(3:2^4*3^6*7^0)
12288(3:2^12*3^1*7^0)
12348(3:2^2*3^2*7^3)
13824(3:2^9*3^3*7^0)
14336(3:2^11*3^0*7^1)
16384(3:2^14*3^0*7^0)
16464(3:2^4*3^1*7^3)
17496(3:2^3*3^7*7^0)
18144(3:2^5*3^4*7^1)
18432(3:2^11*3^2*7^0)
19683(3:2^0*3^9*7^0)
23814(3:2^1*3^5*7^2)
24192(3:2^7*3^3*7^1)
24696(3:2^3*3^2*7^3)
27783(3:2^0*3^4*7^3)
28224(3:2^6*3^2*7^2)
28812(3:2^2*3^1*7^4)
33614(3:2^1*3^0*7^5)
36864(3:2^12*3^2*7^0)
37632(3:2^8*3^1*7^2)
38416(3:2^4*3^0*7^4)
39366(3:2^1*3^9*7^0)
41472(3:2^9*3^4*7^0)
42336(3:2^5*3^3*7^2)
43218(3:2^1*3^2*7^4)
61236(3:2^2*3^7*7^1)
69984(3:2^5*3^7*7^0)
71442(3:2^1*3^6*7^2)
73728(3:2^13*3^2*7^0)
78732(3:2^2*3^9*7^0)
81648(3:2^4*3^6*7^1)
83349(3:2^0*3^5*7^3)
86436(3:2^2*3^2*7^4)
93312(3:2^7*3^6*7^0)
114688(3:2^14*3^0*7^1)
117649(3:2^0*3^0*7^6)
122472(3:2^3*3^7*7^1)
124416(3:2^9*3^5*7^0)
137781(3:2^0*3^9*7^1)
166698(3:2^1*3^5*7^3)
169344(3:2^7*3^3*7^2)
172872(3:2^3*3^2*7^4)
177147(3:2^0*3^11*7^0)
194481(3:2^0*3^4*7^4)
217728(3:2^7*3^5*7^1)
221184(3:2^13*3^3*7^0)
229376(3:2^15*3^0*7^1)
263424(3:2^8*3^1*7^3)
268912(3:2^4*3^0*7^5)
294912(3:2^15*3^2*7^0)
314928(3:2^4*3^9*7^0)
321489(3:2^0*3^8*7^2)
413343(3:2^0*3^10*7^1)
489888(3:2^5*3^7*7^1)
497664(3:2^11*3^5*7^0)
746496(3:2^10*3^6*7^0)
884736(3:2^15*3^3*7^0)
921984(3:2^7*3^1*7^4)
944784(3:2^4*3^10*7^0)
964467(3:2^0*3^9*7^2)
1161216(3:2^11*3^4*7^1)
1229312(3:2^9*3^0*7^4)
1417176(3:2^3*3^11*7^0)
1928934(3:2^1*3^9*7^2)
2322432(3:2^12*3^4*7^1)
2333772(3:2^2*3^5*7^4)
3429216(3:2^5*3^7*7^2)
3483648(3:2^11*3^5*7^1)
3981312(3:2^14*3^5*7^0)
4816896(3:2^15*3^1*7^2)
6377292(3:2^2*3^13*7^0)
6718464(3:2^10*3^8*7^0)
6967296(3:2^12*3^5*7^1)
7411887(3:2^0*3^2*7^7)
7962624(3:2^15*3^5*7^0)
9289728(3:2^14*3^4*7^1)
9834496(3:2^12*3^0*7^4)
11239424(3:2^15*3^0*7^3)
13176688(3:2^4*3^0*7^7)
21233664(3:2^18*3^4*7^0)
21781872(3:2^4*3^4*7^5)
22674816(3:2^7*3^11*7^0)
27433728(3:2^8*3^7*7^2)
27869184(3:2^14*3^5*7^1)
28697814(3:2^1*3^15*7^0)
33191424(3:2^9*3^3*7^4)
38723328(3:2^8*3^2*7^5)
42467328(3:2^19*3^4*7^0)
44471322(3:2^1*3^3*7^7)
66382848(3:2^10*3^3*7^4)
69177612(3:2^2*3^1*7^8)
78121827(3:2^0*3^13*7^2)
88942644(3:2^2*3^3*7^7)
133923132(3:2^2*3^14*7^1)
146313216(3:2^12*3^6*7^2)
161243136(3:2^13*3^9*7^0)
211631616(3:2^9*3^10*7^1)
219469824(3:2^11*3^7*7^2)
242121642(3:2^1*3^1*7^9)
261382464(3:2^6*3^5*7^5)
266827932(3:2^2*3^4*7^7)
277766496(3:2^5*3^11*7^2)
298722816(3:2^9*3^5*7^4)
317447424(3:2^8*3^11*7^1)
322486272(3:2^14*3^9*7^0)
339738624(3:2^22*3^4*7^0)
361417728(3:2^10*3^1*7^6)
376233984(3:2^13*3^8*7^1)
396361728(3:2^21*3^3*7^1)
429981696(3:2^16*3^8*7^0)
464679936(3:2^10*3^3*7^5)
624974616(3:2^3*3^13*7^2)
648121824(3:2^5*3^10*7^3)
672126336(3:2^7*3^7*7^4)
679477248(3:2^23*3^4*7^0)
726364926(3:2^1*3^2*7^9)
816293376(3:2^9*3^13*7^0)
833299488(3:2^5*3^12*7^2)
864162432(3:2^7*3^9*7^3)
877879296(3:2^13*3^7*7^2)
937461924(3:2^2*3^14*7^2)
944111616(3:2^17*3^1*7^4)
1134213192(3:2^3*3^10*7^4)
1219784832(3:2^7*3^4*7^6)
1239146496(3:2^13*3^2*7^5)
1249949232(3:2^4*3^13*7^2)
1269789696(3:2^10*3^11*7^1)
1316818944(3:2^12*3^8*7^2)
1323248724(3:2^2*3^9*7^5)
1416167424(3:2^16*3^2*7^4)
1481421312(3:2^9*3^10*7^2)
1644167168(3:2^25*3^0*7^2)
1764331632(3:2^4*3^8*7^5)
1934917632(3:2^15*3^10*7^0)
1936973136(3:2^4*3^1*7^9)
1977326743(3:2^0*3^0*7^11)
2478292992(3:2^14*3^2*7^5)
2711943423(3:2^0*3^18*7^1)
2962842624(3:2^10*3^10*7^2)
3373232128(3:2^12*3^0*7^7)
3749847696(3:2^4*3^14*7^2)
3776446464(3:2^19*3^1*7^4)
4161798144(3:2^20*3^4*7^2)
4269246912(3:2^6*3^4*7^7)
4294967296(3:2^32*3^0*7^0)
4374822312(3:2^3*3^13*7^3)
4427367168(3:2^8*3^1*7^8)
4879139328(3:2^9*3^4*7^6)
4999796928(3:2^6*3^13*7^2)
6242697216(3:2^19*3^5*7^2)
6273179136(3:2^9*3^6*7^5)
6327867987(3:2^0*3^17*7^2)
7231849128(3:2^3*3^17*7^1)
7434878976(3:2^14*3^3*7^5)
7939492344(3:2^3*3^10*7^5)
8931928887(3:2^0*3^12*7^5)
9663676416(3:2^30*3^2*7^0)
9913171968(3:2^16*3^2*7^5)
11666192832(3:2^6*3^12*7^3)
13124466936(3:2^3*3^14*7^3)
14942364192(3:2^5*3^4*7^8)
16728477696(3:2^12*3^5*7^5)
19999187712(3:2^8*3^13*7^2)
22769316864(3:2^10*3^3*7^7)
24794911296(3:2^6*3^18*7^0)
29884728384(3:2^6*3^4*7^8)
36118462464(3:2^18*3^9*7^1)
36294822144(3:2^8*3^10*7^4)
36691771392(3:2^24*3^7*7^0)
37192366944(3:2^5*3^19*7^0)
38843449344(3:2^22*3^3*7^3)
43226124984(3:2^3*3^8*7^7)
46664771328(3:2^8*3^12*7^3)
61917364224(3:2^20*3^10*7^0)
62762119218(3:2^1*3^22*7^0)
72236924928(3:2^19*3^9*7^1)
73222472421(3:2^0*3^21*7^1)
81663349824(3:2^6*3^12*7^4)
82644187136(3:2^11*3^0*7^9)
96786192384(3:2^11*3^9*7^4)
97629963228(3:2^2*3^20*7^1)
97844723712(3:2^27*3^6*7^0)
123834728448(3:2^21*3^10*7^0)
126414618624(3:2^17*3^9*7^2)
146444944842(3:2^1*3^21*7^1)
148769467776(3:2^7*3^19*7^0)
161128382464(3:2^26*3^0*7^4)
166729339224(3:2^3*3^11*7^6)
189621927936(3:2^16*3^10*7^2)
213324668928(3:2^13*3^12*7^2)
214366293288(3:2^3*3^13*7^5)
219667417263(3:2^0*3^22*7^1)
242872713216(3:2^15*3^2*7^7)
243799621632(3:2^16*3^12*7^1)
291776343642(3:2^1*3^11*7^7)
292889889684(3:2^2*3^21*7^1)
299649466368(3:2^23*3^6*7^2)
312264916992(3:2^15*3^4*7^6)
331838373888(3:2^14*3^10*7^3)
371898842112(3:2^10*3^2*7^9)
466121392128(3:2^24*3^4*7^3)
629974412928(3:2^7*3^15*7^3)
663676747776(3:2^15*3^10*7^3)
674211299328(3:2^21*3^8*7^2)
691617999744(3:2^7*3^8*7^7)
723486239847(3:2^0*3^16*7^5)
746636341248(3:2^12*3^12*7^3)
793437161472(3:2^11*3^18*7^0)
797311366362(3:2^1*3^19*7^3)
964648319796(3:2^2*3^15*7^5)
1127898677248(3:2^26*3^0*7^5)
1333834713792(3:2^6*3^11*7^6)
1623497637888(3:2^33*3^3*7^1)
1631424872448(3:2^23*3^4*7^4)
1771684761728(3:2^7*3^0*7^12)
1826434842624(3:2^30*3^5*7^1)
2126163643632(3:2^4*3^18*7^3)
2613227194368(3:2^11*3^12*7^4)
2712892291396(3:2^2*3^0*7^14)
2766471998976(3:2^9*3^8*7^7)
2868933924864(3:2^11*3^5*7^8)
3211867717632(3:2^18*3^6*7^5)
3363432789843(3:2^0*3^5*7^12)
3376269119286(3:2^1*3^15*7^6)
3843923188392(3:2^3*3^5*7^11)
4918172442624(3:2^13*3^6*7^7)
7771926822912(3:2^20*3^2*7^7)
7877961278334(3:2^1*3^14*7^7)
8349416423424(3:2^35*3^5*7^0)
8463329722368(3:2^16*3^17*7^0)
9992477343744(3:2^20*3^4*7^6)
11284439629824(3:2^18*3^16*7^0)
13229462671488(3:2^7*3^16*7^4)
13667282447616(3:2^8*3^3*7^11)
16698832846848(3:2^36*3^5*7^0)
22839948214272(3:2^24*3^4*7^5)
23917744283328(3:2^6*3^3*7^12)
32362142367744(3:2^25*3^9*7^2)
42313823813632(3:2^20*3^0*7^9)
61873298866176(3:2^33*3^1*7^4)
63264216171744(3:2^5*3^24*7^1)
63712967786496(3:2^20*3^11*7^3)
111497693626368(3:2^18*3^11*7^4)
112717121716224(3:2^34*3^8*7^0)
113941476238632(3:2^3*3^1*7^15)
139894682812416(3:2^21*3^4*7^7)
141424683122688(3:2^37*3^1*7^3)
161444773912464(3:2^4*3^6*7^12)
183611771191296(3:2^17*3^5*7^8)
213172849999872(3:2^26*3^3*7^6)
223232279977728(3:2^8*3^2*7^13)
284688972772848(3:2^4*3^26*7^1)
377132488327168(3:2^40*3^0*7^3)
411782264189298(3:2^1*3^30*7^0)
442136281481216(3:2^29*3^0*7^7)
448168463834112(3:2^10*3^12*7^7)
484884627849216(3:2^40*3^2*7^2)
896336927668224(3:2^11*3^12*7^7)
962938848411648(3:2^26*3^15*7^0)
1128914147966976(3:2^15*3^15*7^4)
1227364214243328(3:2^35*3^6*7^2)
1299339276189696(3:2^33*3^2*7^5)
1349636611663872(3:2^11*3^23*7^1)
1431924916617216(3:2^34*3^5*7^3)
1678736193748992(3:2^23*3^5*7^7)
2273843733331968(3:2^31*3^2*7^6)
2343938939766144(3:2^7*3^3*7^14)
2624118229942272(3:2^14*3^4*7^11)
2863849833234432(3:2^35*3^5*7^3)
2998992262791168(3:2^17*3^4*7^10)
3718138366623744(3:2^15*3^9*7^8)
4649919888623184(3:2^4*3^25*7^3)
6997648613179392(3:2^17*3^3*7^11)
7749349147798272(3:2^8*3^7*7^12)
13896723694981176(3:2^3*3^16*7^9)
19637827427893248(3:2^39*3^6*7^2)
23274462136762368(3:2^44*3^3*7^2)
28127267277193728(3:2^9*3^4*7^14)
32391278679932928(3:2^14*3^24*7^1)
36877862166921216(3:2^16*3^14*7^6)
38661972748664832(3:2^34*3^8*7^3)
42238838692642816(3:2^44*3^0*7^4)
47414394214612992(3:2^16*3^16*7^5)
61994793182386176(3:2^11*3^7*7^12)
72762999466622976(3:2^36*3^2*7^6)
141241316616929214(3:2^1*3^30*7^3)
231971836491988992(3:2^35*3^9*7^3)
312323622796394496(3:2^17*3^10*7^9)
323891164381446144(3:2^19*3^7*7^10)
372391394188197888(3:2^48*3^3*7^2)
463943672983977984(3:2^36*3^9*7^3)
644634698399612928(3:2^30*3^6*7^7)
647782328762892288(3:2^20*3^7*7^10)
648414198618914816(3:2^27*3^20*7^7)
692326187863473728(3:2^6*3^26*7^6)
926834266434716766(3:2^1*3^14*7^13)
937966232396418624(3:2^6*3^2*7^18)
1237392633811173376(3:2^25*3^0*7^18)
1441742192231781636(3:2^2*3^12*7^14)
1941284718397882368(3:2^31*3^17*7^1)
2124878238688739328(3:2^39*3^11*7^6)
2281917636193288192(3:2^48*3^7*7^4)
2478243343218487424(3:2^7*3^16*7^12)
2481142889673916416(3:2^36*3^1*7^15)
2869473284441874432(3:2^13*3^11*7^11)
3649381388949389312(3:2^22*3^14*7^10)
3778166711413374976(3:2^30*3^19*7^3)
4369711429192777728(3:2^26*3^22*7^6)
6713196811688869888(3:2^26*3^14*7^18)
6972846677441318912(3:2^12*3^24*7^6)
7121398723329916928(3:2^27*3^30*7^1)
7414674131477734128(3:2^4*3^14*7^13)
7648167182749663232(3:2^19*3^9*7^14)
7897826318638462416(3:2^4*3^31*7^11)
8188494399622322688(3:2^9*3^23*7^9)
8231392371397361664(3:2^38*3^14*7^3)
8678223239868448768(3:2^17*3^21*7^8)
8783241936419946496(3:2^21*3^13*7^13)
8823713194823819264(3:2^13*3^13*7^19)
9131481642927338368(3:2^7*3^32*7^13)
9476762676643233792(3:2^25*3^24*7^0)
9637414646288744448(3:2^20*3^13*7^8)
9671339462289784832(3:2^47*3^10*7^3)
11124149114646822912(3:2^24*3^12*7^13)
11423892282266818688(3:2^7*3^36*7^4)
11477893137767497728(3:2^15*3^11*7^11)
11487246962114166784(3:2^38*3^6*7^8)
11699637961661169664(3:2^14*3^25*7^17)
12288344244447346688(3:2^29*3^30*7^3)
12743868444433186816(3:2^22*3^31*7^2)
12817733788798261248(3:2^11*3^21*7^8)
13484729169694687232(3:2^26*3^29*7^1)
13782212864348243968(3:2^11*3^30*7^8)
13967171996631433216(3:2^33*3^12*7^13)
14173377783148838912(3:2^42*3^3*7^9)
14212961989991221216(3:2^5*3^38*7^3)
14418647887626633216(3:2^18*3^23*7^18)
14631977384824274944(3:2^28*3^20*7^11)
14799619912779169792(3:2^29*3^28*7^0)
14871412397629981696(3:2^10*3^12*7^20)
14918733386347446272(3:2^27*3^7*7^18)
14967629426192993768(3:2^3*3^7*7^19)
16287124178774827712(3:2^6*3^23*7^8)
16414674376718286848(3:2^31*3^20*7^2)
16493131238891927296(3:2^8*3^8*7^19)
16819714632674443264(3:2^35*3^7*7^20)
16823191641769639936(3:2^26*3^28*7^4)
16891919833132211449(3:2^0*3^34*7^10)
17341928819219347792(3:2^4*3^21*7^11)
17389427867933289272(3:2^3*3^24*7^9)
17477388234383163392(3:2^43*3^5*7^5)
17888349917437493248(3:2^22*3^35*7^4)
17947967697168498688(3:2^17*3^17*7^13)
18117427266932196336(3:2^4*3^34*7^17)
18372813419496994368(3:2^6*3^30*7^12)

そのプログラムが吐き出したデータをExcelで合成数の昇順ソートと粘度で降順ソートして、粘度3以上をピックアップしてみた。

4996238671872は何度も見かけたが、
937638166841712は今まで陰に隠れていたね。

因みに、これら2つは、

277777788888899-4996238671872-438939648-4478976-338688-27648-2688-768-336-54-20-0
27777789999999999-937638166841712-231928233984-4478976-338688-27648-2688-768-336-54-20-0

4478976-…-20-0系です。


一番最初に作った葉ノードを追いかける枝刈りなしプログラムが完了するのに30秒だとして、
このプログラムはなんと、0.3秒の瞬殺だったのである。

まぁ、葉ノードを追いかけるプログラムも多倍長に対応させ、枝刈りしたら、64ビット正整数型を超える10進20桁が0.06秒なので桁違いに速いんだけどね。

でも、求めてるものが違うから、同列に考えてよいとは言えないんだよな。

もし、新プログラムを多倍長に対応させてたとして、高速にさせるにはどうしたらよいだろか。

2^aの固定多倍長バイナリデータファイル
3^bの固定多倍長バイナリデータファイル
7^dの固定多倍長バイナリデータファイル

を予め作っておいて、そのバイナリファイルから2^a、3^b、7^cをそれぞれレコードで読み込んで、多倍長乗算をして、そこから根ノードへ向かってともくろんでいる。

ただ、今回は前回までとはちょっと思考を変えようと思う。

2^a*3^b*7^d合成数を10進数表記して次の枝ノードを求め、5と2と3と7で素因数分解する。

10の倍数判定は、末尾が0 これは粘度1に決定。

ここからは、再起処理にして、途中の枝ノード保持しする。

5の倍数判定は、末尾が0か5
2の倍数判定は、末尾が0か2か4か6か8
3の倍数判定は、各桁の合計が3の倍数
5と2と3はプログラムで何とか割り続けてもらおう。
(割り算がボトルネックになりそうだな)
7の倍数判定は、残った合成数を7^bファイルから検索すればよいだろう。

新たな(a,b,c,d)が求まったら、これをデータベースから検索する。
見つかれば、これ以上計算せずに粘度が求まる。
見つからなければ、さらに枝ノードを求める。

粘度が求まったら、再起処理から戻りながら、データベースを更新していく。


実は、そんなに新しい枝ノードは見つからないだろうと踏んでいる。

あまりにも多いようであれば、粘度1とかは省いても良いだろう。


まぁ、このプログラムは枝というパズルのピースを拾ってきては、それをパズルに填め込むという感じだろうか。

枝は効率よく見つかるはずだ。(速いか遅いかは別)


例えば、葉ノード直下の枝ノードを1万桁まで求めたいとすると、先の3ファイルも1万桁用ファイルにする。

[10001/log10(2)+1]=33223
[10001/log10(3)+1]=20962
[10001/log10(7)+1]=11835

33223*10004/2/1024^2≒158.483MB
20962*10004/2/1024^2≒99.995MB
11835*10004/2/1024^2≒56.456MB

トータル300MB強、CD半分くらいの量です。

まぁ、現実的で十分扱えるファイルサイズではある。

素因数分解ルーチンが吉と出るか凶と出るか。

やってみなければわからないことだらけだな。


つづく(ちょっとやる気が出てきた)


Viewing all articles
Browse latest Browse all 5376

Trending Articles