C言語でコラッツの問題を確認してみる

Cプログラミング C言語

数学でまだ証明されていない問題として、《コラッツの問題》というものがある。
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と収束する。
わたしの頭ではコラッツの問題を証明できないような数の発見はできないが、もしあるとすれば夢がある。

コメント

タイトルとURLをコピーしました