找出以100万以下的数字开始的最长序列。

来源:互联网 发布:用手机怎么注册淘宝号 编辑:程序博客网 时间:2024/04/30 03:29

以下迭代序列定义在整数集合上:

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);}}


原创粉丝点击