是否可以在恒定时间内计算isFibonacci()?

时间:2019-03-01 12:41:47

标签: algorithm fibonacci

可以创建快速的“给定第n个斐波那契数”功能,如here所述。有没有办法编写在O(1)中执行的isFibonacci(int i)函数?

我可以预先计算值。但是计算最后是O(n),对于大数我无法做到。

1 个答案:

答案 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); 
}