Open In App

Count composite fibonacci numbers from given array

Last Updated : 09 Jun, 2021
Comments
Improve
Suggest changes
7 Likes
Like
Report

Given an array arr[] of size N, the task is to find the composite Fibonacci numbers present in the given array.

Examples:

Input: arr[] = {13, 55, 7, 3, 5, 21, 233, 144, 6}
Output: 55 21 144
Explanation: 
Composite array elements are {55, 21, 144, 6}. 
Fibonacci array elements are {55, 21, 144}. 
Therefore, array elements which are both composite as well as Fibonacci are {55, 21, 144}.

Input: arr[] = {34, 13, 11, 8, 3, 55, 233}
Output: 3
Explanation: 
Composite array elements are {34, 8, 55} 
Fibonacci array elements are {34, 8, 55} 
Therefore, array elements which are both composite as well as Fibonacci are {34, 8, 55}.

Approach: Follow the steps below to solve the problem:

Below is the implementation of the above approach:

C++




// C++ program to implement
// the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to find all Fibonacci
// numbers up to Max
set<int> createhashmap(int Max)
{
    // Store all Fibonacci numbers
    // upto Max
    set<int> hashmap;
 
    // Stores previous element
    // of Fibonacci sequence
    int curr = 1;
 
    // Stores previous element
    // of Fibonacci sequence
    int prev = 0;
 
    // Insert prev into hashmap
    hashmap.insert(prev);
 
    // Insert all the Fibonacci
    // numbers up to Max
    while (curr <= Max) {
 
        // Insert curr into hashmap
        hashmap.insert(curr);
 
        // Stores curr into temp
        int temp = curr;
 
        // Update curr
        curr = curr + prev;
 
        // Update prev
        prev = temp;
    }
 
    return hashmap;
}
 
// Function to find all Composite
// numbers up to Max
vector<bool> SieveOfEratosthenes(
    int Max)
{
 
    // isPrime[i]: Stores if i is
    // a prime number or not
    vector<bool> isPrime(Max, true);
 
    isPrime[0] = false;
    isPrime[1] = false;
 
    // Calculate all prime numbers up to
    // Max using Sieve of Eratosthenes
    for (int p = 2; p * p <= Max; p++) {
 
        // If P is a prime number
        if (isPrime[p]) {
 
            // Set all multiple of P
            // as non-prime
            for (int i = p * p; i <= Max;
                 i += p) {
 
                // Update isPrime
                isPrime[i] = false;
            }
        }
    }
    return isPrime;
}
 
// Function to find the numbers which is
// both a composite and Fibonacci number
int cntFibonacciPrime(int arr[], int N)
{
 
    // Stores the largest element
    // of the array
    int Max = arr[0];
 
    // Traverse the array arr[]
    for (int i = 1; i < N; i++) {
 
        // Update Max
        Max = max(Max, arr[i]);
    }
 
    // isPrim[i] check i is
    // a prime number or not
    vector<bool> isPrime
        = SieveOfEratosthenes(Max);
 
    // Stores all the Fibonacci numbers
    set<int> hashmap
        = createhashmap(Max);
 
    // Traverse the array arr[]
    for (int i = 0; i < N; i++) {
 
        // current element is not
        // a composite number
        if (arr[i] == 1)
            continue;
 
        // If current element is a Fibonacci
        // and composite number
        if ((hashmap.count(arr[i]))
            && !isPrime[arr[i]]) {
 
            // Print current element
            cout << arr[i] << " ";
        }
    }
}
 
// Driver Code
int main()
{
    int arr[] = { 13, 55, 7, 3, 5, 21,
                  233, 144, 89 };
    int N = sizeof(arr) / sizeof(arr[0]);
 
    cntFibonacciPrime(arr, N);
 
    return 0;
}


Java

Python3

C#

Javascript

Output: 

55 21 144

 

Time Complexity: O(N + Max * log(log(Max))), where Max is the largest element in the array
Auxiliary Space: O(N)



Next Article

Similar Reads