【发布时间】:2016-04-11 13:47:20
【问题描述】:
我的任务是找到斐波那契列表的第一个非零成员的索引,该索引可以被这个值整除(在我下面的示例中,这些值是:17 12 61)。所以我创建了斐波那契数列,通过该数列划分每个成员并检查余数是否为零:
public static void main(String[] args) {
String stringInputValues = "17 12 61";
Scanner scan = new Scanner(stringInputValues);
int i = 0;
BigInteger value = BigInteger.ZERO;;
//start create Fibonacci numbers
int N = 9000;
BigInteger[] fibArray = new BigInteger[N + 1];
fibArray[0] = BigInteger.ZERO;
fibArray[1] = BigInteger.ONE;
for (i = 2; i <= N; i++) {
fibArray[i] = fibArray[i - 1].add(fibArray[i - 2]);
}
//end create Fibonacci numbers
while (scan.hasNext()) {
value = BigInteger.valueOf(scan.nextLong());
for (i = 0; i <= fibArray.length - 1; i++) {
if (i > 0 && fibArray[i].remainder(value) == BigInteger.ZERO) {
System.out.println(i);
break;
}
}
}
}
这不适用于分隔符的大值(数字大到我得到 java.lang.OutOfMemoryError: Java heap space),例如 233328 433156 1032566 而不是 17 12 61 我觉得我的算法太简单了,效率低下。你能帮我做一个更有效的吗? 谢谢!
【问题讨论】:
-
它不起作用怎么办?只是时间太长了?这可能属于codereview
-
是的。数字很大,我收到消息:线程“main”java.lang.OutOfMemoryError 中的异常:Java 堆空间
-
我猜你没有停止条件。