找出以100萬以下的數字開始的最長序列。

以下迭代序列定義在整數集合上:

n → n/2 (當n是偶數時)
n → 3n + 1 (當n是奇數時)

應用以上規則,並且以數字13開始,我們得到以下序列:

13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1

可以看出這個以13開始以1結束的序列包含10個項。雖然還沒有被證明(Collatz問題),但是人們認爲在這個規則下,以任何數字開始都會以1結束。

以哪個不超過100萬的數字開始,能給得到最長的序列?

注意: 一旦序列開始之後,也就是從第二項開始,項是可以超過100萬的。

public class Test {
	public static int max = 0;
	public static long value = 0;
	public static void getStep(long n) {
		long temp = n;
		int count = 0;
		while(true){
			if(n == 1) {
				count++;
				if(max < count){
					max = count;
					value = temp;
				}
				break;
			}
			if (n % 2 == 0) {
				n /= 2;
				count ++;
			} else {
				n = 3 * n + 1;
				count ++;
			}
		
		}
		
	}

	public static void main(String[] args) {
		long n = 1000000;
		for (long i = n; i > 13; i--) {
			getStep(i);
		}
		System.out.println(max);
		System.out.println(value);
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章