Prime numbers and Fibonacci
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++
#include <bits/stdc++.h>
using namespace std;
bool isSquare( int n)
{
int sr = sqrt (n);
return (sr * sr == n);
}
void printPrimeAndFib( int n)
{
bool prime[n + 1];
memset (prime, true , sizeof (prime));
for ( int p = 2; p * p <= n; p++) {
if (prime[p] == true ) {
for ( int i = p * 2; i <= n; i += p)
prime[i] = false ;
}
}
for ( int i=2; i<=n; i++)
if (prime[i] && (isSquare(5 * i * i + 4) > 0 ||
isSquare(5 * i * i - 4) > 0))
cout << i << " " ;
}
int main()
{
int n = 30;
printPrimeAndFib(n);
return 0;
}
|
Java
class PrimeAndFib
{
Boolean isSquare( int n)
{
int sr = ( int )Math.sqrt(n);
return (sr * sr == n);
}
static void printPrimeAndFib( int n)
{
Boolean[] prime = new Boolean[n + 1 ];
for ( int p = 0 ; p <= n; p++)
prime[p] = true ;
for ( int p = 2 ; p * p <= n; p++) {
if (prime[p] == true ) {
for ( int i = p * 2 ; i <= n; i += p)
prime[i] = false ;
}
}
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+ " " );
}
}
public static void main(String s[])
{
int n = 30 ;
printPrimeAndFib(n);
}
}
|
Python3
import math
def isSquare(n) :
sr = ( int )(math.sqrt(n))
return (sr * sr = = n)
def printPrimeAndFib(n) :
prime = [ True ] * (n + 1 )
p = 2
while (p * p < = n ):
if (prime[p] = = True ) :
for i in range (p * 2 , n + 1 , p) :
prime[i] = False
p = p + 1
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 = "")
n = 30
printPrimeAndFib(n);
|
C#
using System;
class GFG {
static bool isSquare( int n)
{
int sr = ( int )Math.Sqrt(n);
return (sr * sr == n);
}
static void printPrimeAndFib( int n)
{
bool [] prime = new bool [n + 1];
for ( int p = 0; p <= n; p++)
prime[p] = true ;
for ( int p = 2; p * p <= n; p++) {
if (prime[p] == true ) {
for ( int i = p * 2; i <= n; i += p)
prime[i] = false ;
}
}
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 + " " );
}
}
public static void Main()
{
int n = 30;
printPrimeAndFib(n);
}
}
|
PHP
<?php
function isSquare( $n )
{
$sr = (int)sqrt( $n );
return ( $sr * $sr == $n );
}
function printPrimeAndFib( $n )
{
$prime = array_fill (0, $n + 1, true);
for ( $p = 2; $p * $p <= $n ; $p ++)
{
if ( $prime [ $p ] == true)
{
for ( $i = $p * 2;
$i <= $n ; $i += $p )
$prime [ $i ] = false;
}
}
for ( $i = 2; $i <= $n ; $i ++)
if ( $prime [ $i ] && (isSquare(5 * $i * $i + 4) > 0 ||
isSquare(5 * $i * $i - 4) > 0))
echo $i . " " ;
}
$n = 30;
printPrimeAndFib( $n );
?>
|
Javascript
<script>
function isSquare(n)
{
let sr = Math.sqrt(n);
return (sr * sr == n);
}
function prletPrimeAndFib(n)
{
let prime = [];
for (let p = 0; p <= n; p++)
prime[p] = true ;
for (let p = 2; p * p <= n; p++) {
if (prime[p] == true ) {
for (let i = p * 2; i <= n; i += p)
prime[i] = false ;
}
}
for (let i=2; i<=n; i++) {
let sqrt = Math.sqrt(5 * i * i + 4);
let sqrt1 = Math.sqrt(5 * i * i - 4);
let x = Math.floor(sqrt);
let y = Math.floor(sqrt1);
if (prime[i]== true && (Math.pow(sqrt,2) ==
Math.pow(x,2) || Math.pow(sqrt1,2) ==
Math.pow(y,2)))
document.write(i+ " " );
}
}
let n = 30;
printPrimeAndFib(n);
</script>
|
Output:
2 3 5 13
Time Complexity: O(nloglogn)
Auxiliary Space: O(n), since n extra space has been taken.
Last Updated :
16 Aug, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...