Collatz問題 #1
1に至るまでの操作回数。最初から1の場合はcollatz(1) = 0になる。
#include <stdio.h> unsigned int collatz(unsigned int x); unsigned int collatz(unsigned int x) { unsigned int iter = 0; while (x > 1) { x = x & 1 ? 3 * x + 1 : x >> 1; ++iter; } return iter; } int main(void) { printf("%u\n", collatz(25)); return 0; }
シーケンスは
25 76 38 19 58 29 88 44 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
なので、結果はcollatz(25) = 23になる。
なお、このコードには問題がある。