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

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

我可以预先计算值.但是计算最后是O(n),我不能对大数进行计算.

最佳答案
当且仅当(5 * n2 4)或(5 * n2 – 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); 
} 

转载注明原文:算法-是否可以在恒定时间内计算isFibonacci()? - 代码日志