找出以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 万的。
答案:837799
程序代码如下:
public class Kaora {
static int count(long n){
//参数类型必须用long,用int得不出答案
int length = 1;
while (n != 1) {
if (n % 2 == 0) {
n /= 2;
} else {
n = 3 * n + 1;
}
length++;
}
return length;
}
public static void main(String[] args) {
int max = 1; //记录那个有最长序列的值
int maxLength = 1; //记录对应的序列长度
for (int i = 2; i <= 1000000; i++) {
int len=count(i);
if (len > maxLength) {
maxLength = len;
max = i;
}
}
System.out.println(max);
}
}