Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 O(Log n) 시간 및 O(1) 공간에서 주어진 범위의 피보나치 수 계산

<시간/>

시작과 끝 숫자가 있는 범위가 주어지고 O(Log n) 시간과 O(1) 공간에서 주어진 범위 사이에서 사용할 수 있는 피보나치 수의 총 개수를 계산하는 작업입니다.

피보나치 수란 무엇입니까

피보나치 수열은 피보나치 수열로 알려진 수열로, 모든 새로운 수는 앞의 마지막 두 수의 합입니다.

여기서 f(0) =0 및 f(1) =1 즉, f(0) 및 f(1)은 시퀀스에서 고정 위치를 가지며 계산은 세 번째 숫자부터 시작됩니다.

시퀀스 계산에 사용된 공식은 -

Fn =Fn-1 + Fn-2

어디,

F0 =0, F1 =l

예를 들어

Input − start = 6 and last = 100
Output − Number of fibonacci Numbers in the series are 6

설명 - 6에서 100 사이의 피보나치 수는 8, 13, 21, 34, 55, 89입니다. 즉, 총 개수는 6입니다.

Input − start = 0 and last = 8
Output − Number of fibonacci Numbers in the series are 7

설명 - 0과 8 사이의 피보나치 수는 0, 1, 1, 2, 3, 5, 8입니다. 즉, 총 개수는 7입니다.

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.

  • 범위를 생성하려면 시작 및 끝 번호를 입력하세요.

  • fib1을 0으로, fib2를 1로, fib3을 1로 선언하고 초기화합니다.

  • 임시 변수 res를 선언하고 0으로 초기화

  • fib1이 끝보다 작거나 같은 동안 루프 시작

  • 루프 내에서 fib1이 시작보다 크거나 같은지 확인한 다음 res를 1만큼 증가시킵니다.

  • fib1을 fib2로, fib2를 fib3으로, fib3을 fib1 + fib2로 설정

  • 반환 해상도

  • 결과 인쇄

예시

#include <bits/stdc++.h>
using namespace std;
// function to count fibonacci numbers in range
// from start to last
int count_fibonacci(int start, int last){
   // First three Fibonacci Numbers
   int fib1 = 0, fib2 = 1, fib3 = 1;
   // res to count the number of fibonacci
   int res = 0;
   while (fib1 <= last){
      if (fib1 >= start){
         res++;
      }
      fib1 = fib2;
      fib2 = fib3;
      fib3 = fib1 + fib2;
   }
   return res;
}
// main function
int main(){
   int start = 6, last = 100;
   cout << "Number of fibonacci Numbers in the series are "
   << count_fibonacci(start, last);
   return 0;
}

출력

위의 코드를 실행하면 다음 출력이 생성됩니다 -

Number of fibonacci Numbers in the series are 6