自然数から新たな自然数を作る次のような関数 f を考える。
1 以上の自然数 m に対して、ft(m) = 1 となるような最小の非負整数 t を t(m) と書くことにする。m が与えられるので、t(m) を求めよ。
ただし、ft(m) とは m に f を t 回適用したものを表す。
入力は 1 行のみからなり、その行には 1 つの自然数 m が含まれる。
1 ≤ m ≤ 109 であり、任意の非負整数 k に対して fk(m) ≤ 1018 であることが保証されている。
t(m) を 1 行に出力せよ。もし ft(m) = 1 となるような t が存在しない場合、"Counterexample for Collatz conjecture!" と 1 行に出力せよ。
42
7
1
525858345
670617279
8
16
0
585
986
#include <stdio.h> int main(void) { int m; long long n; int t; scanf("%d", &m); for(n = m, t = 0; n > 1; t++) { if (n % 2 == 0) n /= 2; else n = n * 3 + 1; } printf("%d\n", t); return 0; }
#include <iostream> using namespace std; int main() { int m; cin >> m; int t = 0; for(long long n = m; n > 1; t++) { if (n % 2 == 0) n /= 2; else n = n * 3 + 1; } cout << t << endl; return 0; }
import java.util.Scanner; class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int m = sc.nextInt(); int t = 0; for(long n = m; n > 1; t++) { if (n % 2 == 0) n /= 2; else n = n * 3 + 1; } System.out.println(t); } }