補足2(改) コラッツ証明にそって計算しなおしてみた
実際に奇数処理回数を比較するプログラムを作成しました。
改良版は、主に偶数計算を訂正しました。
1千万まで計算しましたが、理論値のほうが実際より常に大きくなることが確認できました。
数字が大きくなるほど、離れていくので式としては問題ないことがわかります。
例外値や計算ミスがありますでしょうか?
#include "stdafx.h"
#include <stdlib.h>
void kora(long x,bool f) {
long i,j;
int h,l,g;
j=i=x;
g=l=0;
h=0;
while(i) {
if(i & 1) {
l*=2;
l+=2;
h=2;
g+=l;
} else {
l+=h;
g+=h;
}
i>>=1;
}
h=0;
while(j>1) {
if(j & 1) {
h++;
j=j*3+1;
}
j/=2;
}
if(f) printf("%ld,%d,%d\n",x,g,h);
else if(g<h) printf("error %ld,%d\n",x,g-h);
}
int main(int argc, char* argv[])
{
long x,y;
y=atoi(argv[1]);
for(x=0;x<y;x++) kora(x,true);
for(x=0;x<y;x++) kora(x,false);
return 0;
};
99までの結果
1,2,0
2,2,0
3,8,2
4,2,0
5,14,1
6,8,2
7,22,5
8,2,0
9,20,6
10,14,1
11,28,4
12,8,2
13,36,2
14,22,5
15,52,5
16,2,0
17,26,3
18,20,6
19,34,6
20,14,1
21,42,1
22,28,4
23,58,4
24,8,2
25,50,7
26,36,2
27,66,41
28,22,5
29,82,5
30,52,5
31,114,39
32,2,0
33,32,8
34,26,3
35,40,3
36,20,6
37,48,6
38,34,6
39,64,11
40,14,1
41,56,40
42,42,1
43,72,9
44,28,4
45,88,4
46,58,4
47,120,38
48,8,2
49,64,7
50,50,7
51,80,7
52,36,2
53,96,2
54,66,41
55,128,41
56,22,5
57,112,10
58,82,5
59,144,10
60,52,5
61,176,5
62,114,39
63,240,39
64,2,0
65,38,8
66,32,8
67,46,8
68,26,3
69,54,3
70,40,3
71,70,37
72,20,6
73,62,42
74,48,6
75,78,3
76,34,6
77,94,6
78,64,11
79,126,11
80,14,1
81,70,6
82,56,40
83,86,40
84,42,1
85,102,1
86,72,9
87,134,9
88,28,4
89,118,9
90,88,4
91,150,33
92,58,4
93,182,4
94,120,38
95,246,38
96,8,2
97,78,43
98,64,7
99,94,7
1が連続する場合、3倍と見なして桁上げだけを行うことで精度があがりました。
if(i & 1) {
h=2;
if(i & 2) {
l+=4;
g+=4;
} else {
l++;
l*=2;
g+=l;
}
} else {
l+=h;
g+=h;
}
i>>=1;
1,2,0
2,2,0
3,14,2
4,2,0
5,14,1
6,14,2
7,26,5
8,2,0
9,20,6
10,14,1
11,42,4
12,14,2
13,26,2
14,26,5
15,38,5
16,2,0
17,26,3
18,20,6
19,48,6
20,14,1
21,42,1
22,42,4
23,70,4
24,14,2
25,32,7
26,26,2
27,54,41
28,26,5
29,38,5
30,38,5
31,50,39
32,2,0
33,32,8
34,26,3
35,54,3
36,20,6
37,48,6
38,48,6
39,76,11
40,14,1
41,56,40
42,42,1
43,102,9
44,42,4
45,70,4
46,70,4
47,98,38
48,14,2
49,38,7
50,32,7
51,60,7
52,26,2
53,54,2
54,54,41
55,82,41
56,26,5
57,44,10
58,38,5
59,66,10
60,38,5
61,50,5
62,50,39
63,62,39
64,2,0
65,38,8
66,32,8
67,60,8
68,26,3
69,54,3
70,54,3
71,82,37
72,20,6
73,62,42
74,48,6
75,108,3
76,48,6
77,76,6
78,76,11
79,104,11
80,14,1
81,70,6
82,56,40
83,116,40
84,42,1
85,102,1
86,102,9
87,162,9
88,42,4
89,84,9
90,70,4
91,130,33
92,70,4
93,98,4
94,98,38
95,126,38
96,14,2
97,44,43
98,38,7
99,66,7




