เราได้รับช่วงที่มีตัวเลขเริ่มต้นและสิ้นสุด และภารกิจคือการคำนวณจำนวนรวมของตัวเลขฟีโบนักชีที่มีอยู่ระหว่างช่วงที่กำหนดในเวลา O(Log n) และช่องว่าง O(1)
ตัวเลขฟีโบนักชีคืออะไร
ตัวเลขฟีโบนักชีคือลำดับของตัวเลขที่เรียกว่าลำดับฟีโบนักชี โดยที่ทุกจำนวนใหม่คือผลรวมของตัวเลขสองตัวที่อยู่ก่อนหน้า
โดยที่ f(0) =0 และ f(1) =1 เช่น f(0) และ f(1) มีตำแหน่งคงที่ในลำดับและการคำนวณจะเริ่มจากตัวเลขที่สาม
สูตรที่ใช้คำนวณลำดับคือ −
Fn =Fn-1 + Fn-2
ที่ไหน
F0 =0, F1 =ล
ตัวอย่างเช่น
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 มากกว่าหรือเท่ากับจุดเริ่มต้นแล้วเพิ่มความละเอียดขึ้น 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