How to check if a given number is Fibonacci number? (original) (raw)

Last Updated : 26 Oct, 2023

Try it on GfG Practice redirect icon

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

Approach 1:

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*n 2 + 4) or (5*n 2 – 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 5nn + 4 or 5nn - 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 5nn + 4 or 5nn - 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

JavaScript

PHP

s=(int)(sqrt(s = (int)(sqrt(s=(int)(sqrt(x)); return ($s * s==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 * nn + 4) || isPerfectSquare(5 * n∗n * nn - 4); } // Driver Code for ($i = 1; i<=10;i <= 10; 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 ?>

`

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 Fibona...

**Time Complexity: O(log N), where N is is the number that we square-root.
**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.")

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

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

`

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 Fibona...

**Time Complexity: O(log N), where N is is the number that we square-root.
**Auxiliary Space: O(1)

Approach 3:

This is another approach to check if a given number is Fibonacci number or not.

Steps:

To check if a given number is Fibonacci number or not, we do the following steps:

  1. First check if the number is 0 or 1, then return true.
  2. Then till the number comes do while loop.
  3. In each iteration:
    • First calculate Fibonacci of that iteration.
    • Then check if it matches with given number or not.
      * If matches, return true.
      * If the value goes beyond, given number then return false.
      * Otherwise continue.

Below is the implementation of the above approach:

C++ `

// C++ program to check if a given number is // Fibonacci number or not #include using namespace std;

// Function to check Fibonacci number bool isFibonacci(int N) { if (N == 0 || N == 1) return true; int a = 0, b = 1, c; while (true) { c = a + b; a = b; b = c; if (c == N) return true; else if (c >= N) { return false; } } }

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; }

// This code is contributed by Susobhan Akhuli

Java

public class GFG {

// Function to check if a given number is a Fibonacci
// number
static boolean isFibonacci(int N)
{
    // Fibonacci numbers start with 0 and 1, so they are
    // already Fibonacci
    if (N == 0 || N == 1)
        return true;

    // Initialize two variables to track Fibonacci
    // numbers
    int a = 0, b = 1, c;

    // Generate Fibonacci numbers until we reach N or a
    // number greater than N
    while (true) {
        // Calculate the next Fibonacci number in the
        // sequence
        c = a + b;
        a = b;
        b = c;

        // If the current Fibonacci number is equal to
        // N, it is a Fibonacci number
        if (c == N)
            return true;
        // If the current Fibonacci number is greater
        // than N, it is not a Fibonacci number
        else if (c >= N) {
            return false;
        }
    }
}

public static void main(String[] args)
{
    // Loop from 1 to 10 to check if each number is a
    // Fibonacci number
    for (int i = 1; i <= 10; i++) {
        // Call the isFibonacci function to check if the
        // number is a Fibonacci number
        if (isFibonacci(i)) {
            System.out.println(
                i + " is a Fibonacci number.");
        }
        else {
            System.out.println(
                i + " is not a Fibonacci number.");
        }
    }
}

}

// This code is contributed by shivamgupta310570

Python3

Python program to check if a given number is

Fibonacci number or not

Function to check Fibonacci number

def isFibonacci(N): if N == 0 or N == 1: return True a, b = 0, 1 while True: c = a + b a = b b = c if c == N: return True elif c >= N: return False

Driver Code

if name == 'main': for i in range(1, 11): if isFibonacci(i): print(i, "is a Fibonacci number.") else: print(i, "is not a Fibonacci number.")

This code is contributed by Aaysi Mishra

C#

// C# program to check if a given number is // Fibonacci number or not using System;

public class GFG { // Function to check if a given number is a Fibonacci // number static bool IsFibonacci(int N) { // Fibonacci numbers start with 0 and 1, so they are // already Fibonacci if (N == 0 || N == 1) return true;

    // Initialize two variables to track Fibonacci
    // numbers
    int a = 0, b = 1, c;

    // Generate Fibonacci numbers until we reach N or a
    // number greater than N
    while (true) {
        // Calculate the next Fibonacci number in the
        // sequence
        c = a + b;
        a = b;
        b = c;

        // If the current Fibonacci number is equal to
        // N, it is a Fibonacci number
        if (c == N)
            return true;
        // If the current Fibonacci number is greater
        // than N, it is not a Fibonacci number
        else if (c >= N) {
            return false;
        }
    }
}

static void Main(string[] args)
{
    // Loop from 1 to 10 to check if each number is a
    // Fibonacci number
    for (int i = 1; i <= 10; i++) {
        // Call the IsFibonacci function to check if the
        // number is a Fibonacci number
        if (IsFibonacci(i)) {
            Console.WriteLine(
                $"{i} is a Fibonacci number.");
        }
        else {
            Console.WriteLine(
                $"{i} is not a Fibonacci number.");
        }
    }
}

}

// This code is contributed by Susobhan Akhuli

JavaScript

// JavaScript program to check if a given number is // Fibonacci number or not

// Function to check Fibonacci number function isFibonacci(N) { if (N === 0 || N === 1) return true; let a = 0; let b = 1; let c; while (true) { c = a + b; a = b; b = c; if (c === N) return true; else if (c >= N) { return false; } } }

for (let i = 1; i <= 10; i++) { if (isFibonacci(i)) { console.log(i + " is a Fibonacci number."); } else { console.log(i + " is not a Fibonacci number."); } }

// This code is contributed by Susobhan Akhuli

`

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 Fibona...

**Time Complexity: O(N), for iteration.
**Auxiliary Space: O(1)

This article is contributed by Abhay Rathi.

Feeling lost in the world of random DSA topics, wasting time without progress? It's time for a change! Join our DSA course, where we'll guide you on an exciting journey to master DSA efficiently and on schedule.

You'll access excellent video content by our CEO, Sandeep Jain, tackle common interview questions, and engage in real-time coding contests covering various DSA topics. We're here to prepare you thoroughly for online assessments and interviews.

Ready to dive in? Explore our free demo content and join our DSA course, trusted by over 100,000 geeks! Whether it's DSA in C++, Java, Python, or JavaScript we've got you covered. Let's embark on this exciting journey together!