自然数から新たな自然数を作る次のような関数 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);
}
}