 GFG App
Open App Browser
Continue

# How to check if a given number is Fibonacci number?

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*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 ` `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 ` `#include ` `#include `   `// 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

 ``

## Javascript

 ``

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 ` `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)

### 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`

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), for iteration.
Auxiliary Space: O(1)