欧拉工程第14题 找出以100万以下的数字开始的最长序列

来源:互联网 发布:xmindpro mac 破解版 编辑:程序博客网 时间:2024/04/30 04:18

题目

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

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万的。

解题方法

从1开始迭代,直到100万,计算每个迭代序列的长度,输出最大序列的数字。

程序

public static void solve() {    int max = 1;    int maxLength = 1;    for (int num = 2; num < 1000000; num++) {        long temp = num;        int length = 1;        while (temp != 1) {            if (temp % 2 == 0) {                temp /= 2;            } else {                temp = 3 * temp + 1;            }            length++;        }        if (length > maxLength) {            maxLength = length;            max = num;        }    }    System.out.println(max);}
0 0