可以创建快速的“给定第n个斐波那契数”功能,如here所述。有没有办法编写在O(1)中执行的isFibonacci(int i)
函数?
我可以预先计算值。但是计算最后是O(n),对于大数我无法做到。
答案 0 :(得分:4)
当且仅当(5 * n 2 + 4)或(5 * n 2 – 4)中的一个或两个为完美平方时,数字为斐波那契数
bool isFibonacci(int n)
{
// n is Fibinacci if one of 5*n*n + 4 or 5*n*n - 4 or both
// is a perferct square
return isPerfectSquare(5*n*n + 4) ||
isPerfectSquare(5*n*n - 4);
}