숫자가 피보나치 시퀀스에 속하는지 확인하는 효율적인 방법이 있습니까?JS : 숫자가 피보나치 시퀀스 (루프 없음)에 속하는지 확인
배열에 시퀀스를 생성하고 새로 생성 된 시퀀스 번호가 입력 번호와 동일한 지 확인할 때마다 루프를 사용하여 많은 예제를 보았습니다. 다른 방법이 있습니까?
숫자가 피보나치 시퀀스에 속하는지 확인하는 효율적인 방법이 있습니까?JS : 숫자가 피보나치 시퀀스 (루프 없음)에 속하는지 확인
배열에 시퀀스를 생성하고 새로 생성 된 시퀀스 번호가 입력 번호와 동일한 지 확인할 때마다 루프를 사용하여 많은 예제를 보았습니다. 다른 방법이 있습니까?
http://www.geeksforgeeks.org/check-number-fibonacci-number/
이 링크 세부 사항 경우에만, 하나 (5 * N2 + 4) 또는 (5 * N2 모두 - 4) 완벽한 광장입니다.
그래서,
function (num) {
if (isSquare(5*(num*num)-4) || isSquare(5*(num*num)+4) {
return true;
} else { return false; }
}
그런 다음 isSquare 그냥 간단한 검사 기능이 될 것입니다.
편집 : 이것은 피보나치 숫자를 찾는 데 훨씬 효율적이고 쉬운 방법이지만 상한이 있습니다. 약 70 번째 피보나치 숫자 이상에서는 숫자가 너무 커서 문제를 볼 수 있습니다.
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;
이것은 저의 파이썬 구현입니다. 하지만 수식은 수족관이 너무 크지 않을 때만 작동합니다. 피보나치 번호에 대한 특별한 품질이 숫자가 피보나치임을 의미가 있다고
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));
}
큰 숫자 일수록 실패 할 가능성이 높습니다.
상한선을 지수 검색 한 다음 'f0'을 하한선으로 사용하고 유효한 fibonacci 번호를 이진 검색 할 수 있습니다. 더 빨리 가능하면 확신 할 수 없으며, 수학자에게 물어보십시오. – ASDFGerte