Program to find Prime Fibonacci Numbers till N (original) (raw)

Last Updated : 10 Oct, 2024

Given a number, find the numbers (smaller than or equal to n) which are both Fibonacci and prime.

**Examples:

Input : n = 40 Output: 2 3 5 13 **Explanation : Here, range(upper limit) = 40 Fibonacci series upto n is, 1, 1, 2, 3, 5, 8, 13, 21, 34. Prime numbers in above series = 2, 3, 5, 13.

Input : n = 100 Output: 2 3 5 13 89 **Explanation : Here, range(upper limit) = 40 Fibonacci series upto n are 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89. Prime numbers in Fibonacci upto n : 2, 3, 5, 13, 89.

A **simple solution is to iterate generate all fibonacci numbers smaller than or equal to n. For every Fibonacci number, check if it is prime or not. If prime, then print it.

An **efficient solution is to use Sieve to generate all Prime numbers up to n. After we have generated prime numbers, we can quickly check if a prime is Fibonacci or not by using the property that a number is Fibonacci if it is of the form 5i2 + 4 or in the form 5i2 - 4. Refer this for details.

Below is the implementation of above steps

C++ `

// CPP program to print prime numbers present // in Fibonacci series. #include <bits/stdc++.h> using namespace std;

// Function to check perfect square bool isSquare(int n) { int sr = sqrt(n); return (sr * sr == n); }

// Prints all numbers less than or equal to n that // are both Prime and Fibonacci. void printPrimeAndFib(int n) { // Using Sieve to generate all primes // less than or equal to n. bool prime[n + 1];
memset(prime, true, sizeof(prime)); for (int p = 2; p * p <= n; p++) {

    // If prime[p] is not changed, then
    // it is a prime
    if (prime[p] == true) {

        // Update all multiples of p
        for (int i = p * 2; i <= n; i += p)
            prime[i] = false;
    }
}

// Now traverse through the range and print numbers
// that are both prime and Fibonacci.
for (int i=2; i<=n; i++)    
   if (prime[i] && (isSquare(5 * i * i + 4) > 0 || 
                    isSquare(5 * i * i - 4) > 0))
            cout << i << " ";

}

// Driver function int main() { int n = 30; printPrimeAndFib(n); return 0; }

Java

// Java program to print prime numbers // present in Fibonacci series. class PrimeAndFib { // Function to check perfect square Boolean isSquare(int n) { int sr = (int)Math.sqrt(n); return (sr * sr == n); }

// Prints all numbers less than or equal // to n that are both Prime and Fibonacci. static void printPrimeAndFib(int n) { // Using Sieve to generate all // primes less than or equal to n. Boolean[] prime = new Boolean[n + 1];

// memset(prime, true, sizeof(prime));
for (int p = 0; p <= n; p++) 
prime[p] = true;
for (int p = 2; p * p <= n; p++) {

    // If prime[p] is not changed,
    // then it is a prime
    if (prime[p] == true) {

        // Update all multiples of p
        for (int i = p * 2; i <= n; i += p)
            prime[i] = false;
    }
}

// Now traverse through the range and 
// print numbers that are both prime 
// and Fibonacci.
for (int i=2; i<=n; i++) { 
    double sqrt = Math.sqrt(5 * i * i + 4);
    double sqrt1 = Math.sqrt(5 * i * i - 4);

    int x = (int) sqrt;
    int y = (int) sqrt1;

if (prime[i]==true && (Math.pow(sqrt,2) == 
    Math.pow(x,2) || Math.pow(sqrt1,2) == 
    Math.pow(y,2)))
    System.out.print(i+" ");
}

}

// driver program public static void main(String s[]) { int n = 30; printPrimeAndFib(n); } }

// This code is contributed by Prerna Saini

Python

Python 3 program to print

prime numbers present in

Fibonacci series.

import math

Function to check perfect square

def isSquare(n) : sr = (int)(math.sqrt(n)) return (sr * sr == n)

Prints all numbers less than

or equal to n that are

both Prime and Fibonacci.

def printPrimeAndFib(n) :

# Using Sieve to generate all 
# primes less than or equal to n.
prime =[True] * (n + 1) 
p = 2
while(p * p <= n ):
    
    # If prime[p] is not changed,
    # then it is a prime
    if (prime[p] == True) :
        
        # Update all multiples of p
        for i in range(p * 2, n + 1, p) :
            prime[i] = False
            
    p = p + 1

# Now traverse through the range 
# and print numbers that are 
# both prime and Fibonacci.
for i in range(2, n + 1) :
    if (prime[i] and (isSquare(5 * i * i + 4) > 0 or
         isSquare(5 * i * i - 4) > 0)) :
        print(i , " ",end="")

Driver function

n = 30 printPrimeAndFib(n);

This code is contributed

by Nikita Tiwari.

C#

// C# program to print prime numbers // present in Fibonacci series. using System;

class GFG {

// Function to check perfect square
static bool isSquare(int n)
{
    int sr = (int)Math.Sqrt(n);
    
    return (sr * sr == n);
}
 
// Prints all numbers less than or equal
// to n that are both Prime and Fibonacci.
static void printPrimeAndFib(int n)
{
    
    // Using Sieve to generate all 
    // primes less than or equal to n.
    bool[] prime = new bool[n + 1]; 
     
    // memset(prime, true, sizeof(prime));
    for (int p = 0; p <= n; p++) 
        prime[p] = true;
        
    for (int p = 2; p * p <= n; p++) {
 
        // If prime[p] is not changed,
        // then it is a prime
        if (prime[p] == true) {
 
            // Update all multiples of p
            for (int i = p * 2; i <= n; i += p)
                prime[i] = false;
        }
    }
 
    // Now traverse through the range and 
    // print numbers that are both prime 
    // and Fibonacci.
    for (int i = 2; i <= n; i++) {
        
        double sqrt = Math.Sqrt(5 * i * i + 4);
        double sqrt1 = Math.Sqrt(5 * i * i - 4);
     
        int x = (int) sqrt;
        int y = (int) sqrt1;
 
    if (prime[i] == true && (Math.Pow(sqrt, 2) == 
         Math.Pow(x, 2) || Math.Pow(sqrt1, 2) == 
                                Math.Pow(y, 2)))
        Console.Write(i + " ");
    }
}
 
// driver program
public static void Main()
{
    int n = 30;
    
    printPrimeAndFib(n);
}

}

// This code is contributed by Anant Agarwal.

JavaScript

PHP

sr=(int)sqrt(sr = (int)sqrt(sr=(int)sqrt(n); return ($sr * sr==sr == sr==n); } // Prints all numbers less than or equal // to n that are both Prime and Fibonacci. function printPrimeAndFib($n) { // Using Sieve to generate all primes // less than or equal to n. prime=arrayfill(0,prime = array_fill(0, prime=arrayfill(0,n + 1, true); for ($p = 2; p∗p * pp <= n;n; n;p++) { // If prime[p] is not changed, // then it is a prime if ($prime[$p] == true) { // Update all multiples of p for ($i = $p * 2; i<=i <= i<=n; i+=i += i+=p) prime[prime[prime[i] = false; } } // Now traverse through the range // and print numbers that are both // prime and Fibonacci. for ($i = 2; i<=i <= i<=n; $i++) if ($prime[$i] && (isSquare(5 * i∗i * ii + 4) > 0 || isSquare(5 * i∗i * ii - 4) > 0)) echo $i . " "; } // Driver Code $n = 30; printPrimeAndFib($n); // This code is contributed by mits ?>

`

**Output:

2 3 5 13

**Time Complexity: O(nloglogn)

**Auxiliary Space: O(n), since n extra space has been taken.