Подсчитайте числа Фибоначчи в заданном диапазоне за время O (Log n) и пространство O (1)
Учитывая диапазон, подсчитайте числа Фибоначчи в данном диапазоне. Первые несколько чисел Фибоначчи: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 141, ..
Пример :
Ввод: низкий = 10, высокий = 100 Выход: 5 Приведены пять чисел Фибоначчи. диапазона, числа 13, 21, 34, 55 и 89. Ввод: низкий = 10, высокий = 20 Выход: 1 Есть только одно число Фибоначчи, 13. Вход: низкий = 0, высокий = 1 Выход: 3 Числа Фибоначчи 0, 1 и 1
Мы настоятельно рекомендуем вам свернуть браузер и сначала попробовать это самостоятельно.
Решение грубой силы состоит в том, чтобы одно за другим найти все числа Фибоначчи и подсчитать все числа Фибоначчи в заданном диапазоне.
Эффективное решение - использовать предыдущее число Фибоначчи для генерации следующего, используя простую формулу Фибоначчи: f n = f n-1 + f n-2 .
C++
// C++ program to count Fibonacci numbers in given range #include <bits/stdc++.h> using namespace std; // Returns count of fibonacci numbers in [low, high] int countFibs( int low, int high) { // Initialize first three Fibonacci Numbers int f1 = 0, f2 = 1, f3 = 1; // Count fibonacci numbers in given range int result = 0; while (f1 <= high) { if (f1 >= low) result++; f1 = f2; f2 = f3; f3 = f1 + f2; } return result; } // Driver program int main() { int low = 10, high = 100; cout << "Count of Fibonacci Numbers is " << countFibs(low, high); return 0; } |
Python3
# Python3 program to count Fibonacci # numbers in given range # Returns count of fibonacci # numbers in [low, high] def countFibs(low, high): # Initialize first three # Fibonacci Numbers f1, f2, f3 = 0 , 1 , 1 # Count fibonacci numbers in # given range result = 0 while (f1 < = high): if (f1 > = low): result + = 1 f1 = f2 f2 = f3 f3 = f1 + f2 return result # Driver Code low, high = 10 , 100 print ( "Count of Fibonacci Numbers is" , countFibs(low, high)) # This code is contributed # by mohit kumar |
C#
// C# program to count Fibonacci // numbers in given range using System; public class GFG { // Returns count of fibonacci // numbers in [low, high] static int countFibs( int low, int high) { // Initialize first three // Fibonacci Numbers int f1 = 0, f2 = 1, f3 = 1; // Count fibonacci numbers // in given range int result = 0; while (f1 <= high) { if (f1 >= low) result++; f1 = f2; f2 = f3; f3 = f1 + f2; } return result; } // Driver Code public static void Main(String []args) { int low = 10, high = 100; Console.WriteLine( "Count of Fibonacci Numbers is " + countFibs(low, high)); } } // This code is contributed by Sam007. |
PHP
<?php // PHP program to count // Fibonacci numbers in // given range // Returns count of fibonacci // numbers in [low, high] function countFibs( $low , $high ) { // Initialize first // three Fibonacci Numbers $f1 = 0; $f2 = 1; $f3 = 1; // Count fibonacci // numbers in given range $result = 0; while ( $f1 <= $high ) { if ( $f1 >= $low ) $result ++; $f1 = $f2 ; $f2 = $f3 ; $f3 = $f1 + $f2 ; } return $result ; } // Driver Code $low = 10; $high = 100; echo "Count of Fibonacci Numbers is " , countFibs( $low , $high ); // This code is contributed by nitin mittal. ?> |
Javascript
<script> // JavaScript program to count Fibonacci // numbers in given range // Returns count of fibonacci // numbers in [low, high] function countFibs(low, high) { // Initialize first three // Fibonacci Numbers let f1 = 0, f2 = 1, f3 = 1; // Count fibonacci numbers // in given range let result = 0; while (f1 <= high) { if (f1 >= low) result++; f1 = f2; f2 = f3; f3 = f1 + f2; } return result; } // Driver program let low = 10, high = 100; document.write( "Count of Fibonacci Numbers is " + countFibs(low, high)); // This code is contributed by susmitakundugoaldanga. </script> |
Выход :
Счетчик чисел Фибоначчи - 5
Анализ сложности времени:
Учтите, что числа Фибоначчи можно записать следующим образом:
Таким образом, значение чисел Фибоначчи растет экспоненциально. Это означает, что цикл while растет экспоненциально, пока не достигнет «высокого» значения. Таким образом, цикл выполняется O (Log (high)) раз.
Одним из решений может быть прямое использование приведенной выше формулы для подсчета чисел Фибоначчи, но это практически невозможно (подробности см. Здесь).
Вспомогательное пространство: O (1)
Эта статья предоставлена Судханшу Гуптой . Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше
Вниманию читателя! Не прекращайте учиться сейчас. Освойте все важные концепции DSA с помощью самостоятельного курса DSA по приемлемой для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .
Если вы хотите посещать живые занятия с отраслевыми экспертами, пожалуйста, обращайтесь к Geeks Classes Live и Geeks Classes Live USA.