# Length of longest subsequence of Fibonacci Numbers in an Array

Last Updated : 24 May, 2021

Given an array arr containing non-negative integers, the task is to print the length of the longest subsequence of Fibonacci numbers in this array.
Examples:

Input: arr[] = { 3, 4, 11, 2, 9, 21 }
Output:
Here, the subsequence is {3, 2, 21} and hence the answer is 3.
Input: arr[] = { 6, 4, 10, 13, 9, 25 }
Output:
Here, the subsequence is {1} and hence the answer is 1.

Approach:

• Build hash table containing all the Fibonacci numbers which will be used to test a number in O(1) time.
• Now, we will traverse through the given array.
• We will include all the Fibonacci numbers that we encounter during our traversal into the longest subsequence and hence increase the answer by 1 for every encounter of a Fibonacci number.
• Once the entire initial array has been encountered, we have the length of the longest subsequence containing only Fibonacci numbers with us.

Below is the implementation of the above approach:

## C++

 `// C++ program to find the length` `// of longest subsequence of` `// Fibonacci Numbers in an Array`   `#include ` `using` `namespace` `std;` `#define N 100005`   `// Function to create hash table` `// to check Fibonacci numbers` `void` `createHash(set<``int``>& hash,` `                ``int` `maxElement)` `{` `    ``int` `prev = 0, curr = 1;` `    ``hash.insert(prev);` `    ``hash.insert(curr);`   `    ``while` `(curr <= maxElement) {` `        ``int` `temp = curr + prev;` `        ``hash.insert(temp);` `        ``prev = curr;` `        ``curr = temp;` `    ``}` `}`   `// Function to find the longest` `// subsequence containing` `// all Fibonacci numbers` `int` `longestFibonacciSubsequence(` `    ``int` `arr[], ``int` `n)` `{` `    ``set<``int``> hash;` `    ``createHash(` `        ``hash,` `        ``*max_element(arr, arr + n));`   `    ``int` `answer = 0;`   `    ``for` `(``int` `i = 0; i < n; i++) {` `        ``if` `(hash.find(arr[i])` `            ``!= hash.end()) {` `            ``answer++;` `        ``}` `    ``}`   `    ``return` `answer;` `}`   `// Driver code` `int` `main()` `{` `    ``int` `arr[] = { 3, 4, 11, 2, 9, 21 };` `    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr[0]);`   `    ``// Function call` `    ``cout << longestFibonacciSubsequence(arr, n)` `         ``<< endl;`   `    ``return` `0;` `}`

## Java

 `// Java program to find the length` `// of longest subsequence of` `// Fibonacci Numbers in an Array` `import` `java.util.*;`   `class` `GFG{` `static` `final` `int` `N = ``100005``;` ` `  `// Function to create hash table` `// to check Fibonacci numbers` `static` `void` `createHash(HashSet hash,` `                ``int` `maxElement)` `{` `    ``int` `prev = ``0``, curr = ``1``;` `    ``hash.add(prev);` `    ``hash.add(curr);` ` `  `    ``while` `(curr <= maxElement) {` `        ``int` `temp = curr + prev;` `        ``hash.add(temp);` `        ``prev = curr;` `        ``curr = temp;` `    ``}` `}` ` `  `// Function to find the longest` `// subsequence containing` `// all Fibonacci numbers` `static` `int` `longestFibonacciSubsequence(` `    ``int` `arr[], ``int` `n)` `{` `    ``HashSet hash = ``new` `HashSet();` `    ``createHash(` `        ``hash,Arrays.stream(arr).max().getAsInt());` ` `  `    ``int` `answer = ``0``;` ` `  `    ``for` `(``int` `i = ``0``; i < n; i++) {` `        ``if` `(hash.contains(arr[i])) {` `            ``answer++;` `        ``}` `    ``}` ` `  `    ``return` `answer;` `}` ` `  `// Driver code` `public` `static` `void` `main(String[] args)` `{` `    ``int` `arr[] = { ``3``, ``4``, ``11``, ``2``, ``9``, ``21` `};` `    ``int` `n = arr.length;` ` `  `    ``// Function call` `    ``System.out.print(longestFibonacciSubsequence(arr, n)` `         ``+``"\n"``);` ` `  `}` `}`   `// This code contributed by Princi Singh`

## Python 3

 `# Python 3 program to find the length` `# of longest subsequence of` `# Fibonacci Numbers in an Array`   `N ``=` `100005`   `# Function to create hash table` `# to check Fibonacci numbers` `def` `createHash(``hash``,maxElement):` `    ``prev ``=` `0` `    ``curr ``=` `1` `    ``hash``.add(prev)` `    ``hash``.add(curr)`   `    ``while` `(curr <``=` `maxElement):` `        ``temp ``=` `curr ``+` `prev` `        ``hash``.add(temp)` `        ``prev ``=` `curr` `        ``curr ``=` `temp` `    `  `# Function to find the longest` `# subsequence containing` `# all Fibonacci numbers` `def` `longestFibonacciSubsequence(arr, n):` `    ``hash` `=` `set``()` `    ``createHash(``hash``,``max``(arr))`   `    ``answer ``=` `0`   `    ``for` `i ``in` `range``(n):` `        ``if` `(arr[i] ``in` `hash``):` `            ``answer ``+``=` `1`   `    ``return` `answer`   `# Driver code` `if` `__name__ ``=``=` `'__main__'``:` `    ``arr ``=` `[``3``, ``4``, ``11``, ``2``, ``9``, ``21``]` `    ``n ``=` `len``(arr)`   `    ``# Function call` `    ``print``(longestFibonacciSubsequence(arr, n))`   `# This code is contributed by Surendra_Gangwar`

## C#

 `// C# program to find the length` `// of longest subsequence of` `// Fibonacci Numbers in an Array` `using` `System;` `using` `System.Linq;` `using` `System.Collections.Generic;`   `class` `GFG{` `static` `readonly` `int` `N = 100005;` `  `  `// Function to create hash table` `// to check Fibonacci numbers` `static` `void` `createHash(HashSet<``int``> hash,` `                ``int` `maxElement)` `{` `    ``int` `prev = 0, curr = 1;` `    ``hash.Add(prev);` `    ``hash.Add(curr);` `  `  `    ``while` `(curr <= maxElement) {` `        ``int` `temp = curr + prev;` `        ``hash.Add(temp);` `        ``prev = curr;` `        ``curr = temp;` `    ``}` `}` `  `  `// Function to find the longest` `// subsequence containing` `// all Fibonacci numbers` `static` `int` `longestFibonacciSubsequence(` `    ``int` `[]arr, ``int` `n)` `{` `    ``HashSet<``int``> hash = ``new` `HashSet<``int``>();` `    ``createHash(hash,arr.Max());` `  `  `    ``int` `answer = 0;` `  `  `    ``for` `(``int` `i = 0; i < n; i++) {` `        ``if` `(hash.Contains(arr[i])) {` `            ``answer++;` `        ``}` `    ``}` `  `  `    ``return` `answer;` `}` `  `  `// Driver code` `public` `static` `void` `Main(String[] args)` `{` `    ``int` `[]arr = { 3, 4, 11, 2, 9, 21 };` `    ``int` `n = arr.Length;` `  `  `    ``// Function call` `    ``Console.Write(longestFibonacciSubsequence(arr, n)` `         ``+``"\n"``);` `}` `}`   `// This code is contributed by sapnasingh4991`

## Javascript

 ``

Output:

`3`

Previous
Next