Skip to content
Related Articles
Get the best out of our app
GeeksforGeeks App
Open App
geeksforgeeks
Browser
Continue

Related Articles

How to check if a given number is Fibonacci number?

Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article

Given a number ‘n’, how to check if n is a Fibonacci number. First few Fibonacci numbers are 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, .. 
Examples : 
 

Input : 8
Output : Yes

Input : 34
Output : Yes

Input : 41
Output : No

 

A simple way is to generate Fibonacci numbers until the generated number is greater than or equal to ‘n’. Following is an interesting property about Fibonacci numbers that can also be used to check if a given number is Fibonacci or not. 
A number is Fibonacci if and only if one or both of (5*n2 + 4) or (5*n2 – 4) is a perfect square (Source: Wiki). Following is a simple program based on this concept. 
 

C++




// C++ program to check if x is a perfect square
#include <bits/stdc++.h>
using namespace std;
 
// A utility function that returns true if x is perfect
// square
bool isPerfectSquare(int x)
{
    int s = sqrt(x);
    return (s * s == x);
}
 
// Returns true if n is a Fibonacci Number, else false
bool isFibonacci(int n)
{
    // n is Fibonacci if one of 5*n*n + 4 or 5*n*n - 4 or
    // both is a perfect square
    return isPerfectSquare(5 * n * n + 4)
           || isPerfectSquare(5 * n * n - 4);
}
 
// A utility function to test above functions
int main()
{
    for (int i = 1; i <= 10; i++)
        isFibonacci(i)
            ? cout << i << " is a Fibonacci Number \n"
            : cout << i << " is a not Fibonacci Number \n";
    return 0;
}
 
// This code is contributed by Sania Kumari Gupta (kriSania804)

C




// C program to check if x is a perfect square
#include <math.h>
#include <stdbool.h>
#include <stdio.h>
 
// A utility function that returns true if x is perfect
// square
bool isPerfectSquare(int x)
{
    int s = sqrt(x);
    return (s * s == x);
}
 
// Returns true if n is a Fibonacci Number, else false
bool isFibonacci(int n)
{
    // n is Fibonacci if one of 5*n*n + 4 or 5*n*n - 4 or
    // both is a perfect square
    return isPerfectSquare(5 * n * n + 4)
           || isPerfectSquare(5 * n * n - 4);
}
 
// A utility function to test above functions
int main()
{
    for (int i = 1; i <= 10; i++) {
        if (isFibonacci(i))
            printf("%d is a Fibonacci Number \n", i);
        else
            printf("%d is a not Fibonacci Number \n", i);
    }
    return 0;
}
 
// This code is contributed by Sania Kumari Gupta (kriSania804)

Java




// Java program to check if x is a perfect square
 
class GFG
{
    // A utility method that returns true if x is perfect square
    static  boolean isPerfectSquare(int x)
    {
        int s = (int) Math.sqrt(x);
        return (s*s == x);
    }
      
    // Returns true if n is a Fibonacci Number, else false
    static boolean isFibonacci(int n)
    {
        // n is Fibonacci if one of 5*n*n + 4 or 5*n*n - 4 or both
        // is a perfect square
        return isPerfectSquare(5*n*n + 4) ||
               isPerfectSquare(5*n*n - 4);
    }
 
    // Driver method
    public static void main(String[] args)
    {
        for (int i = 1; i <= 10; i++)
             System.out.println(isFibonacci(i) ?  i +  " is a Fibonacci Number" :
                                                  i + " is a not Fibonacci Number");
    }
}
//This code is contributed by Nikita Tiwari

Python




# python program to check if x is a perfect square
import math
 
# A utility function that returns true if x is perfect square
def isPerfectSquare(x):
    s = int(math.sqrt(x))
    return s*s == x
 
# Returns true if n is a Fibonacci Number, else false
def isFibonacci(n):
 
    # n is Fibonacci if one of 5*n*n + 4 or 5*n*n - 4 or both
    # is a perfect square
    return isPerfectSquare(5*n*n + 4) or isPerfectSquare(5*n*n - 4)
    
# A utility function to test above functions
for i in range(1,11):
     if (isFibonacci(i) == True):
         print i,"is a Fibonacci Number"
     else:
         print i,"is a not Fibonacci Number "

C#




// C# program to check if
// x is a perfect square
using System;
 
class GFG {
 
    // A utility function that returns
    // true if x is perfect square
    static bool isPerfectSquare(int x)
    {
        int s = (int)Math.Sqrt(x);
        return (s * s == x);
    }
 
    // Returns true if n is a
    // Fibonacci Number, else false
    static bool isFibonacci(int n)
    {
        // n is Fibonacci if one of
        // 5*n*n + 4 or 5*n*n - 4 or
        // both are a perfect square
        return isPerfectSquare(5 * n * n + 4) ||
               isPerfectSquare(5 * n * n - 4);
    }
 
    // Driver method
    public static void Main()
    {
        for (int i = 1; i <= 10; i++)
            Console.WriteLine(isFibonacci(i) ? i +
                              " is a Fibonacci Number" : i +
                              " is a not Fibonacci Number");
    }
}
 
// This code is contributed by Sam007

PHP




<?php
// PHP program to check if
// x is a perfect square
 
// A utility function that
// returns true if x is
// perfect square
function isPerfectSquare($x)
{
    $s = (int)(sqrt($x));
    return ($s * $s == $x);
}
 
// Returns true if n is a
// Fibonacci Number, else false
function isFibonacci($n)
{
    // n is Fibonacci if one of
    // 5*n*n + 4 or 5*n*n - 4 or
    // both is a perfect square
    return isPerfectSquare(5 * $n * $n + 4) ||
           isPerfectSquare(5 * $n * $n - 4);
}
 
// Driver Code
for ($i = 1; $i <= 10; $i++)
if(isFibonacci($i))
echo "$i is a Fibonacci Number \n";
else
echo "$i is a not Fibonacci Number \n" ;
 
// This code is contributed by mits
?>

Javascript




<script>
// javascript program to check if x is a perfect square
 
// A utility function that returns true if x is perfect square
function isPerfectSquare( x)
{
    let s = parseInt(Math.sqrt(x));
    return (s * s == x);
}
 
// Returns true if n is a Fibonacci Number, else false
function isFibonacci( n)
{
 
    // n is Fibonacci if one of 5*n*n + 4 or 5*n*n - 4 or both
    // is a perfect square
    return isPerfectSquare(5 * n * n + 4) ||
           isPerfectSquare(5 * n * n - 4);
}
 
// A utility function to test above functions
  for (let i = 1; i <= 10; i++)
     isFibonacci(i)?  document.write( i + " is a Fibonacci Number <br/>"):
                     document.write(i + " is a not Fibonacci Number <br/>") ;
                      
// This code is contributed by Rajput-Ji
 
</script>

Output

1 is a Fibonacci Number 
2 is a Fibonacci Number 
3 is a Fibonacci Number 
4 is a not Fibonacci Number 
5 is a Fibonacci Number 
6 is a not Fibonacci Number 
7 is a not Fibonacci Number 
8 is a Fibonacci Number 
9 is a not Fibonacci Number 
10 is a not Fibonacci Number 

Time Complexity: O(n)

Auxiliary Space: O(1)

Approach 2:

In this approach, we first handle the special case where the input number is 0 (which is a Fibonacci number). Then, we use a while loop to generate Fibonacci numbers until we find a Fibonacci number greater than or equal to the input number. If the generated Fibonacci number is equal to the input number, we return true. Otherwise, we check if either (5 * n * n + 4) or (5 * n * n – 4) is a perfect square, as per the formula mentioned in the original code.

This approach may be more efficient than the original code in some cases, especially for larger input values, as it generates Fibonacci numbers on-the-fly and stops as soon as it finds a Fibonacci number greater than or equal to the input number.

C++




#include <bits/stdc++.h>
using namespace std;
 
bool isPerfectSquare(int n) {
    int root = sqrt(n);
    return (root * root == n);
}
 
bool isFibonacci(int n) {
    if (n == 0) {
        return true;
    }
    int a = 0, b = 1, c = 1;
    while (c < n) {
        a = b;
        b = c;
        c = a + b;
    }
    return (c == n || isPerfectSquare(5 * n * n + 4) || isPerfectSquare(5 * n * n - 4));
}
 
int main() {
    for (int i = 1; i <= 10; i++) {
        if (isFibonacci(i)) {
            cout << i << " is a Fibonacci number.\n";
        } else {
            cout << i << " is not a Fibonacci number.\n";
        }
    }
    return 0;
}

Java




import java.util.*;
 
public class Main {
    public static boolean isPerfectSquare(int n) {
        int root = (int) Math.sqrt(n);
        return (root * root == n);
    }
 
    public static boolean isFibonacci(int n) {
        if (n == 0) {
            return true;
        }
        int a = 0, b = 1, c = 1;
        while (c < n) {
            a = b;
            b = c;
            c = a + b;
        }
        return (c == n || isPerfectSquare(5 * n * n + 4) || isPerfectSquare(5 * n * n - 4));
    }
 
    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            if (isFibonacci(i)) {
                System.out.println(i + " is a Fibonacci number.");
            } else {
                System.out.println(i + " is not a Fibonacci number.");
            }
        }
    }
}

Python3




import math
 
def is_perfect_square(n):
    root = int(math.sqrt(n))
    return (root * root == n)
 
def is_fibonacci(n):
    if n == 0:
        return True
    a, b, c = 0, 1, 1
    while c < n:
        a = b
        b = c
        c = a + b
    return c == n or is_perfect_square(5 * n * n + 4) or is_perfect_square(5 * n * n - 4)
 
for i in range(1, 11):
    if is_fibonacci(i):
        print(i, "is a Fibonacci number.")
    else:
        print(i, "is not a Fibonacci number.")

Javascript




function is_perfect_square(n) {
    let root = Math.floor(Math.sqrt(n));
    return (root * root === n);
}
 
function is_fibonacci(n) {
    if (n === 0) {
        return true;
    }
    let a = 0, b = 1, c = 1;
    while (c < n) {
        [a, b] = [b, c];
        c = a + b;
    }
    return c === n || is_perfect_square(5 * n * n + 4) || is_perfect_square(5 * n * n - 4);
}
 
for (let i = 1; i <= 10; i++) {
    if (is_fibonacci(i)) {
        console.log(i + " is a Fibonacci number.");
    } else {
        console.log(i + " is not a Fibonacci number.");
    }
}
 
// Contributed by adityasha4x71

C#




// C# program for the above approach
 
using System;
 
public class Program {
    static bool IsPerfectSquare(int n) {
    int root = (int)Math.Sqrt(n);
    return (root * root == n);
    }
     
    static bool IsFibonacci(int n) {
        if (n == 0) {
            return true;
        }
        int a = 0, b = 1, c = 1;
        while (c < n) {
            a = b;
            b = c;
            c = a + b;
        }
        return (c == n || IsPerfectSquare(5 * n * n + 4) || IsPerfectSquare(5 * n * n - 4));
    }
     
    public static void Main() {
        for (int i = 1; i <= 10; i++) {
            if (IsFibonacci(i)) {
                Console.WriteLine(i + " is a Fibonacci number.");
            }
            else {
                Console.WriteLine(i + " is not a Fibonacci number.");
            }
        }
    }
 
}
// This code is contributed by adityasha4x71

Output

1 is a Fibonacci number.
2 is a Fibonacci number.
3 is a Fibonacci number.
4 is not a Fibonacci number.
5 is a Fibonacci number.
6 is not a Fibonacci number.
7 is not a Fibonacci number.
8 is a Fibonacci number.
9 is not a Fibonacci number.
10 is not a Fibonacci number.

Time Complexity: O(n)

Auxiliary Space: O(1)

This article is contributed by Abhay Rathi. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above
 


My Personal Notes arrow_drop_up
Last Updated : 28 Mar, 2023
Like Article
Save Article
Similar Reads
Related Tutorials