我的任务是确定前 N 个斐波那契数中的所有数字,这些数字可以以这样的形式给出:w^3 - 1。
例如,我有这样一个简单的程序部分:
public static List<Long> generateFibonacciNumbers(int N) {
List<Long> fibonacciNumbers = new ArrayList<>();
long a = 0, b = 1;
fibonacciNumbers.add(a);
fibonacciNumbers.add(b);
for (int i = 2; i < N; i++) {
long c = a + b;
fibonacciNumbers.add(c);
a = b;
b = c;
}
return fibonacciNumbers;
}
public static boolean isW3Minus1(long num) {
long w = (long) Math.cbrt(num + 1);
return w * w * w - 1 == num;
}
问题是这个程序的结果是0,没有别的。我也手动检查找到这样的数字,但无法做到。所以我开始认为除了0之外没有这样的数字,但无论如何,我也想在这里检查一下。
您可能会发现这篇文章很有趣。这是摘要。
确定斐波那契数列和卢卡斯数列中所有完美幂的著名问题最近已由三位作者解决。我们草拟了这个结果的证明,并应用它来证明,唯一使
成为完美幂的斐波那契数Fn
是Fn ± 1
。斐波那契完美幂定理的证明涉及非常深入的数学,将费马大定理证明中使用的模块化方法与贝克理论相结合。相比之下,利用斐波那契和卢卡斯序列中所有完美幂的知识,确定数字 Fn ± 1 中的完美幂是相当初级的。0, 1, 2, 3, 5 and 8
对于第一个
1000
值,我只想出了 0
。由于 BigDecimal
没有分数幂或 cbrt 方法(如 Math.cbrt
)。我使用 Newton's method
来获得一定的准确性,同时数字的递归和必须是 0,1,8,or 9
才能使数字成为完美的立方体。 (例如 19683 -> 1 + 9 + 6 + 8 + 3 = 27 -> 9 所以它可能是一个完美的立方体(事实上它是)。后者用于消除候选者。