以下迭代序列定义在整数集合上:
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 Problem14
{
public static void main(String[] args)
{
long start = System.currentTimeMillis();
System.out.print("answer: ");
System.out.println(thenu());
long end = System.currentTimeMillis();
System.out.print("time: ");
System.out.println(end - start);
}
static int thenu()
{
int max = 0;
int maxnu = 3;
int array[] = new int [1000009];
array[1] = 1;
array[2] = 1;
for (int i = 3; i < 1000000; i++)
{
long t = i;
int nu = 0;
while(t != 1)
{
if ( t % 2 != 0)
{
t = 3 * t + 1;
}
else
{
t = t / 2;
}
nu++;
//下面的可以直接
// if (t < i)
// {
// break;
// }
{
if (t < i && array[(int)t] == 0)
{
array[(int)t] = nu;
}
else if (t < i)
{
break;
}
}
}
if (t != 1)
{
array[i] = array[(int)t] + nu;
}
else
{
array[i] = nu;
}
if (array[i] > max)
{
max = array[i];
maxnu = i;
}
}
return maxnu;
}
}
answer: 837799
time: 61