数学でまだ証明されていない問題として、《コラッツの問題》というものがある。
C言語でコラッツの問題の確認計算するプログラムを作ってみた。
コラッツの問題とは?
ある数を思い浮かべる。
もしその数が偶数なら2で割る。奇数なら3を掛けて1足す。
同じようにして繰り返すと…
最終的に 1 -> 4 -> 2 -> 1 に収束するという話。
実はこの《コラッツの問題》は、まだ数学的に証明されていない。
例えば偶数の場合
奇数の場合
ある数を27とすると100回以上計算が必要になるので、プログラムにやらせてみる。
コラッツ問題を計算するC言語プログラム
collatz_mondai.c
/*
コラッツの問題
ある数を思い浮かべる。
もしその数が偶数なら2で割る。奇数なら3を掛けて1足す。
同じようにして繰り返すと...
最終的に 1 -> 4 -> 2 -> 1 に収束するという話。
実はこの《コラッツの問題》は、まだ数学的に証明されていない。
*/
#include <stdio.h>
int main(void)
{
int n; /* ある数 */
int pattern[] = {1, 4, 2, 1}; /* 収束するパターン */
int pattern_no = 0; /* パターンの番号 */
int count = 0; /* 収束パターンカウント用 */
/* ある数を入力 */
printf("ある数を思い浮かべてね: ");
scanf("%d", &n);
printf("\n");
/* コラッツ問題をスタート */
while(1){
if(n % 2 == 0){ /* 偶数の場合 */
n = n / 2;
} /* 奇数の場合 */
else{
n = n * 3 + 1;
}
/* 計算回数カウント */
count++;
/* 回数と計算結果表示 */
printf("%5d回目)\t%10d\n", count, n);
/* 計算結果が収束パターンに一致しているか? */
if(n == pattern[pattern_no]){
pattern_no++;
}
/* 収束パターンが全て一致したら終了 */
if(pattern_no == 4) break;
}
return 0;
}
プログラムの実行結果
ある数を10として実行
ある数を思い浮かべてね: 10
1回目) 5
2回目) 16
3回目) 8
4回目) 4
5回目) 2
6回目) 1
7回目) 4
8回目) 2
9回目) 1
27でもやってみる
ある数を思い浮かべてね: 27
1回目) 82
2回目) 41
3回目) 124
4回目) 62
5回目) 31
6回目) 94
7回目) 47
8回目) 142
9回目) 71
10回目) 214
11回目) 107
12回目) 322
13回目) 161
14回目) 484
15回目) 242
16回目) 121
17回目) 364
18回目) 182
19回目) 91
20回目) 274
21回目) 137
22回目) 412
23回目) 206
24回目) 103
25回目) 310
26回目) 155
27回目) 466
28回目) 233
29回目) 700
30回目) 350
31回目) 175
32回目) 526
33回目) 263
34回目) 790
35回目) 395
36回目) 1186
37回目) 593
38回目) 1780
39回目) 890
40回目) 445
41回目) 1336
42回目) 668
43回目) 334
44回目) 167
45回目) 502
46回目) 251
47回目) 754
48回目) 377
49回目) 1132
50回目) 566
51回目) 283
52回目) 850
53回目) 425
54回目) 1276
55回目) 638
56回目) 319
57回目) 958
58回目) 479
59回目) 1438
60回目) 719
61回目) 2158
62回目) 1079
63回目) 3238
64回目) 1619
65回目) 4858
66回目) 2429
67回目) 7288
68回目) 3644
69回目) 1822
70回目) 911
71回目) 2734
72回目) 1367
73回目) 4102
74回目) 2051
75回目) 6154
76回目) 3077
77回目) 9232
78回目) 4616
79回目) 2308
80回目) 1154
81回目) 577
82回目) 1732
83回目) 866
84回目) 433
85回目) 1300
86回目) 650
87回目) 325
88回目) 976
89回目) 488
90回目) 244
91回目) 122
92回目) 61
93回目) 184
94回目) 92
95回目) 46
96回目) 23
97回目) 70
98回目) 35
99回目) 106
100回目) 53
101回目) 160
102回目) 80
103回目) 40
104回目) 20
105回目) 10
106回目) 5
107回目) 16
108回目) 8
109回目) 4
110回目) 2
111回目) 1
112回目) 4
113回目) 2
114回目) 1
試して見ると本当に4⇒2⇒1と収束する。
わたしの頭ではコラッツの問題を証明できないような数の発見はできないが、もしあるとすれば夢がある。
コメント