Javascript JS:检查数字是否属于斐波那契序列(无循环)
是否有一种有效的方法来检查数字是否属于斐波那契序列 我见过许多例子,其中有一个循环,它在数组中创建序列,并每次检查序列的新生成数是否等于输入数。还有别的办法吗Javascript JS:检查数字是否属于斐波那契序列(无循环),javascript,fibonacci,Javascript,Fibonacci,是否有一种有效的方法来检查数字是否属于斐波那契序列 我见过许多例子,其中有一个循环,它在数组中创建序列,并每次检查序列的新生成数是否等于输入数。还有别的办法吗 def is_squared(number): temp_root = math.sqrt(number); temp_root = int(temp_root); return (temp_root * temp_root == number); def check_all_fibo(test_number_list
def is_squared(number):
temp_root = math.sqrt(number);
temp_root = int(temp_root);
return (temp_root * temp_root == number);
def check_all_fibo(test_number_list):
result_fibo_list = [];
for item in test_number_list:
if item==0 or item == 1 or item == 2:
result_fibo_list.append(item);
continue;
if is_squared(5 * item * item - 4) or is_squared(5 * item * item + 4):
result_fibo_list.append(item);
return result_fibo_list;
这是我的python实现。但请记住,该公式仅在fib不太大时有效。
该链接详细说明了斐波那契数的一个特殊性质,即当且仅当(5*n2+4)或(5*n2–4)中的一个或两个是完美正方形时,一个数就是斐波那契数
所以
那么isSquare将只是一个简单的检查函数
编辑:值得注意的是,虽然这是一种更有效、更容易找到斐波那契数的方法,但它确实有一个上限。大约在第70个斐波那契数及以上,您可能会看到问题,因为数字太大 函数isSquare(n){
function isSquare(n) {
return n > 0 && Math.sqrt(n) % 1 === 0;
};
//Equation modified from http://www.geeksforgeeks.org/check-number-fibonacci-number/
function isFibonacci(numberToCheck)
{
// numberToCheck is Fibinacci if one of 5*n*n + 4 or 5*n*n - 4 or both
// is a perferct square
return isPerfectSquare(5*numberToCheck*numberToCheck + 4) ||
isPerfectSquare(5*numberToCheck*numberToCheck - 4);
}
for(var i = 0; i<= 10000; ++i) {
console.log(i + " - " + isFibonacci(i));
}
返回n>0&&Math.sqrt(n)%1==0;
};
//修正方程http://www.geeksforgeeks.org/check-number-fibonacci-number/
函数为fibonacci(numberToCheck)
{
//如果5*n*n+4或5*n*n-4中的一个或两者都有,则numberToCheck为Fibinaci
//这是一个完美的广场
返回isPerfectSquare(5*numberToCheck*numberToCheck+4)||
iPerfectSquare(5*numberToCheck*numberToCheck-4);
}
对于(var i=0;iYou可以对上界进行指数搜索,然后将f0
作为下界,对有效的斐波那契数进行二进制搜索。我不确定是否可能更快,请咨询数学家。
function isSquare(n) {
return n > 0 && Math.sqrt(n) % 1 === 0;
};
//Equation modified from http://www.geeksforgeeks.org/check-number-fibonacci-number/
function isFibonacci(numberToCheck)
{
// numberToCheck is Fibinacci if one of 5*n*n + 4 or 5*n*n - 4 or both
// is a perferct square
return isPerfectSquare(5*numberToCheck*numberToCheck + 4) ||
isPerfectSquare(5*numberToCheck*numberToCheck - 4);
}
for(var i = 0; i<= 10000; ++i) {
console.log(i + " - " + isFibonacci(i));
}