Sum of numbers in the Kth level of a Fibonacci triangle
Given a number K, the task is to find the sum of numbers at the Kth level of the Fibonacci triangle.
Examples:
Input: K = 3
Output: 10
Explanation:
Fibonacci triangle till level 3:
0
1 1
2 3 5
Sum at 3rd level = 2 + 3 + 5 = 10
Input: K = 2
Output: 2
Explanation:
Fibonacci triangle till level 3:
0
1 1
Sum at 3rd level = 1 + 1 = 2
Approach:
- Till Kth level, i.e. from level [1, K-1], count of Fibonacci numbers already used can be computed as:
cnt = N(Level 1) + N(Level 2)
+ N(Level 3) + ...
+ N(Level K-1)
= 1 + 2 + 3 + ... + (K-1)
= K*(K-1)/2
-
- Also, we know that the Kth level will contain K Fibonacci numbers.
- Therefore we can find the numbers in the Kth level as Fibonacci numbers in the range [(cnt + 1), (cnt + 1 + K)].
- We can find the sum of Fibonacci numbers in a range in O(1) time using Binet’s Formula.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
#define MAX 1000000
int fib( int n)
{
double phi = (1 + sqrt (5)) / 2;
return round( pow (phi, n) / sqrt (5));
}
int calculateSum( int l, int r)
{
int sum = fib(r + 2) - fib(l + 1);
return sum;
}
int sumFibonacci( int k)
{
int l = (k * (k - 1)) / 2;
int r = l + k;
int sum = calculateSum(l, r - 1);
return sum;
}
int main()
{
int k = 3;
cout << sumFibonacci(k);
return 0;
}
|
Java
import java.util.*;
class GFG
{
static int fib( int n)
{
double phi = ( 1 + Math.sqrt( 5 )) / 2 ;
return ( int )Math.round(Math.pow(phi, n) / Math.sqrt( 5 ));
}
static int calculateSum( int l, int r)
{
int sum = fib(r + 2 ) - fib(l + 1 );
return sum;
}
static int sumFibonacci( int k)
{
int l = (k * (k - 1 )) / 2 ;
int r = l + k;
int sum = calculateSum(l, r - 1 );
return sum;
}
public static void main(String args[])
{
int k = 3 ;
System.out.println(sumFibonacci(k));
}
}
|
Python3
import math
MAX = 1000000
def fib(n):
phi = ( 1 + math.sqrt( 5 )) / 2
return round ( pow (phi, n) / math.sqrt( 5 ))
def calculateSum(l, r):
sum = fib(r + 2 ) - fib(l + 1 )
return sum
def sumFibonacci(k) :
l = (k * (k - 1 )) / 2
r = l + k
sum = calculateSum(l, r - 1 )
return sum
k = 3
print (sumFibonacci(k))
|
C#
using System;
class GFG
{
static int fib( int n)
{
double phi = (1 + Math.Sqrt(5)) / 2;
return ( int )Math.Round(Math.Pow(phi, n) / Math.Sqrt(5));
}
static int calculateSum( int l, int r)
{
int sum = fib(r + 2) - fib(l + 1);
return sum;
}
static int sumFibonacci( int k)
{
int l = (k * (k - 1)) / 2;
int r = l + k;
int sum = calculateSum(l, r - 1);
return sum;
}
public static void Main()
{
int k = 3;
Console.Write(sumFibonacci(k));
}
}
|
Javascript
<script>
function fib(n) {
var phi = (1 + Math.sqrt(5)) / 2;
return parseInt( Math.round
(Math.pow(phi, n) / Math.sqrt(5)));
}
function calculateSum(l , r) {
var sum = fib(r + 2) - fib(l + 1);
return sum;
}
function sumFibonacci(k)
{
var l = (k * (k - 1)) / 2;
var r = l + k;
var sum = calculateSum(l, r - 1);
return sum;
}
var k = 3;
document.write(sumFibonacci(k));
</script>
|
Time Complexity: O((log n) + (n1/2))
Auxiliary Space: O(1)
Last Updated :
18 Nov, 2021
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...