我正在尝试解决项目欧拉问题第14号:
以下这个迭代序列是用于正整数集合的: - n → n/2 (n为偶数) - n → 3n + 1 (n为奇数)
使用上述规则,从13开始,我们生成以下序列: 13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1
可以看出,这个序列(从13开始,以1结束)包含10个项。虽然还没有被证明(考拉兹猜想),但认为所有起始数字最终都以1结束。
在一百万以下的所有起始数字中,哪个起始数字产生的链最长?
注意:一旦链开始,条款就可以超过一百万。
这是我的方法:
然而,当运行此程序时,我在
以下这个迭代序列是用于正整数集合的: - n → n/2 (n为偶数) - n → 3n + 1 (n为奇数)
使用上述规则,从13开始,我们生成以下序列: 13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1
可以看出,这个序列(从13开始,以1结束)包含10个项。虽然还没有被证明(考拉兹猜想),但认为所有起始数字最终都以1结束。
在一百万以下的所有起始数字中,哪个起始数字产生的链最长?
注意:一旦链开始,条款就可以超过一百万。
这是我的方法:
public class Euler14 {
public static void main(String[] args) {
int temp = 0;
ArrayList<Integer> numbers = new ArrayList<>();
ArrayList<Integer> numberOf = new ArrayList<>();
for(int i = 2; i<1000000; i++) {
numbers.add(i);
temp = i;
while(i!=1) {
if(i%2==0) {
i = i/2;
}
else{
i = (3*i)+1;
}
numbers.add(i);
}
numberOf.add(numbers.size());
Collections.sort(numberOf);
if(numberOf.size()>1) {
numberOf.remove(0);
}
numbers.clear();
i = temp;
System.out.println("Starting number " + i + "\n" +
"Size: " + numberOf + "\n");
}
}
}
然而,当运行此程序时,我在
i
= 113282处遇到以下错误:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
我应该怎么做才能解决这个错误,并且如何改进我的代码?