Open In App

Find the next Non-Fibonacci number

Last Updated : 26 May, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

Given a number N, the task is to find the next Non-Fibonacci number.
Examples: 
 

Input: N = 4 
Output:
6 is the next non-fibonacci number after 4
Input: N = 6 
Output:
 

Approach: As the fibonacci series is given as 
 

0, 1, 1, 2, 3, 5, 8, 13, 21, 34…. 
 

It can be observed that there does not exists any 2 consecutive fibonacci numbers. Therefore, inorder to find the next Non-Fibonacci number, the following cases arise: 
 

  1. If N <= 3, then the next Non-Fibonacci number will be 4
  2. If N > 3, then we will check if (N + 1) is fibonacci number or not
    • If (N + 1) is a fibonacci number then (N + 2) will be the next Non-Fibonacci number. 
       
    • Else (N + 1) will be the answer

Below is the implementation of the above approach:
 

C++




// C++ implementation of the approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to check if a
// number is perfect square
bool isPerfectSquare(int x)
{
    int s = sqrt(x);
    return (s * s == x);
}
 
// Function to check if a
// number is Fibonacci Number
bool isFibonacci(int N)
{
    // N is Fibonacci if either
    // (5*N*N + 4), (5*N*N - 4) or both
    // is a perfect square
    return isPerfectSquare(5 * N * N + 4)
           || isPerfectSquare(5 * N * N - 4);
}
 
// Function to find
// the next Non-Fibonacci Number
int nextNonFibonacci(int N)
{
 
    // Case 1
    // If N<=3, then 4 will be
    // next Non-Fibonacci Number
    if (N <= 3)
        return 4;
 
    // Case 2
    // If N+1 is Fibonacci, then N+2
    // will be next Non-Fibonacci Number
    if (isFibonacci(N + 1))
        return N + 2;
 
    // If N+1 is Non-Fibonacci, then N+2
    // will be next Non-Fibonacci Number
    else
        return N + 1;
}
 
// Driver code
int main()
{
    int N = 3;
    cout << nextNonFibonacci(N)
         << endl;
 
    N = 5;
    cout << nextNonFibonacci(N)
         << endl;
 
    N = 7;
    cout << nextNonFibonacci(N)
         << endl;
}


C




// C implementation of the approach
 
#include <stdio.h>
#include<stdbool.h>
#include<math.h>
 
 
// Function to check if a
// number is perfect square
bool isPerfectSquare(int x)
{
    int s = sqrt(x);
    return (s * s == x);
}
 
// Function to check if a
// number is Fibonacci Number
bool isFibonacci(int N)
{
    // N is Fibonacci if either
    // (5*N*N + 4), (5*N*N - 4) or both
    // is a perfect square
    return isPerfectSquare(5 * N * N + 4)
        || isPerfectSquare(5 * N * N - 4);
}
 
// Function to find
// the next Non-Fibonacci Number
int nextNonFibonacci(int N)
{
 
    // Case 1
    // If N<=3, then 4 will be
    // next Non-Fibonacci Number
    if (N <= 3)
        return 4;
 
    // Case 2
    // If N+1 is Fibonacci, then N+2
    // will be next Non-Fibonacci Number
    if (isFibonacci(N + 1))
        return N + 2;
 
    // If N+1 is Non-Fibonacci, then N+2
    // will be next Non-Fibonacci Number
    else
        return N + 1;
}
 
// Driver code
int main()
{
    int N = 3;
    printf("%d\n",nextNonFibonacci(N));
 
    N = 5;
    printf("%d\n",nextNonFibonacci(N));
 
    N = 7;
    printf("%d",nextNonFibonacci(N));
     
}
 
// This code is contributed by allwink45.


Java




// Java implementation of the approach
import java.util.*;
 
class GFG{
  
// Function to check if a
// number is perfect square
static boolean isPerfectSquare(int x)
{
    int s = (int) Math.sqrt(x);
    return (s * s == x);
}
  
// Function to check if a
// number is Fibonacci Number
static boolean isFibonacci(int N)
{
    // N is Fibonacci if either
    // (5*N*N + 4), (5*N*N - 4) or both
    // is a perfect square
    return isPerfectSquare(5 * N * N + 4)
           || isPerfectSquare(5 * N * N - 4);
}
  
// Function to find
// the next Non-Fibonacci Number
static int nextNonFibonacci(int N)
{
  
    // Case 1
    // If N<=3, then 4 will be
    // next Non-Fibonacci Number
    if (N <= 3)
        return 4;
  
    // Case 2
    // If N+1 is Fibonacci, then N+2
    // will be next Non-Fibonacci Number
    if (isFibonacci(N + 1))
        return N + 2;
  
    // If N+1 is Non-Fibonacci, then N+2
    // will be next Non-Fibonacci Number
    else
        return N + 1;
}
  
// Driver code
public static void main(String[] args)
{
    int N = 3;
    System.out.print(nextNonFibonacci(N)
         +"\n");
  
    N = 5;
    System.out.print(nextNonFibonacci(N)
         +"\n");
  
    N = 7;
    System.out.print(nextNonFibonacci(N)
         +"\n");
}
}
 
// This code is contributed by 29AjayKumar


Python 3




# Python 3 implementation of the approach
from math import sqrt
 
# Function to check if a
# number is perfect square
def isPerfectSquare(x):
    s = sqrt(x)
    return (s * s == x)
 
# Function to check if a
# number is Fibonacci Number
def isFibonacci(N):
 
    # N is Fibonacci if either
    # (5*N*N + 4), (5*N*N - 4) or both
    # is a perfect square
    return isPerfectSquare(5 * N * N + 4) or \
            isPerfectSquare(5 * N * N - 4)
 
# Function to find
# the next Non-Fibonacci Number
def nextNonFibonacci(N):
     
    # Case 1
    # If N<=3, then 4 will be
    # next Non-Fibonacci Number
    if (N <= 3):
        return 4
 
    # Case 2
    # If N+1 is Fibonacci, then N+2
    # will be next Non-Fibonacci Number
    if (isFibonacci(N + 1)):
        return N + 2
 
    # If N+1 is Non-Fibonacci, then N+2
    # will be next Non-Fibonacci Number
    else:
        return N
 
# Driver code
if __name__ == '__main__':
    N = 3
    print(nextNonFibonacci(N))
    N = 4
    print(nextNonFibonacci(N))
 
    N = 7
    print(nextNonFibonacci(N))
     
# This code is contributed by Surendra_Gangwar


C#




// C# implementation of the approach
using System;
 
class GFG{
   
// Function to check if a
// number is perfect square
static bool isPerfectSquare(int x)
{
    int s = (int) Math.Sqrt(x);
    return (s * s == x);
}
   
// Function to check if a
// number is Fibonacci Number
static bool isFibonacci(int N)
{
    // N is Fibonacci if either
    // (5*N*N + 4), (5*N*N - 4) or both
    // is a perfect square
    return isPerfectSquare(5 * N * N + 4)
           || isPerfectSquare(5 * N * N - 4);
}
   
// Function to find
// the next Non-Fibonacci Number
static int nextNonFibonacci(int N)
{
   
    // Case 1
    // If N<=3, then 4 will be
    // next Non-Fibonacci Number
    if (N <= 3)
        return 4;
   
    // Case 2
    // If N+1 is Fibonacci, then N+2
    // will be next Non-Fibonacci Number
    if (isFibonacci(N + 1))
        return N + 2;
   
    // If N+1 is Non-Fibonacci, then N+2
    // will be next Non-Fibonacci Number
    else
        return N + 1;
}
   
// Driver code
public static void Main(String[] args)
{
    int N = 3;
    Console.Write(nextNonFibonacci(N)
         +"\n");
   
    N = 5;
    Console.Write(nextNonFibonacci(N)
         +"\n");
   
    N = 7;
    Console.Write(nextNonFibonacci(N)
         +"\n");
}
}
 
// This code is contributed by Princi Singh


Javascript




<script>
 
// Javascript implementation of the approach
 
// Function to check if a
// number is perfect square
function isPerfectSquare(x)
{
    var s = parseInt(Math.sqrt(x));
    return (s * s == x);
}
 
// Function to check if a
// number is Fibonacci Number
function isFibonacci(N)
{
    // N is Fibonacci if either
    // (5*N*N + 4), (5*N*N - 4) or both
    // is a perfect square
    return isPerfectSquare(5 * N * N + 4)
           || isPerfectSquare(5 * N * N - 4);
}
 
// Function to find
// the next Non-Fibonacci Number
function nextNonFibonacci(N)
{
 
    // Case 1
    // If N<=3, then 4 will be
    // next Non-Fibonacci Number
    if (N <= 3)
        return 4;
 
    // Case 2
    // If N+1 is Fibonacci, then N+2
    // will be next Non-Fibonacci Number
    if (isFibonacci(N + 1))
        return N + 2;
 
    // If N+1 is Non-Fibonacci, then N+2
    // will be next Non-Fibonacci Number
    else
        return N + 1;
}
 
// Driver code
var N = 3;
document.write(nextNonFibonacci(N)+"<br>");
N = 5;
document.write(nextNonFibonacci(N)+"<br>");
N = 7;
document.write(nextNonFibonacci(N)+"<br>");
 
// This code is contributed by rutvik_56.
</script>


Output: 

4
6
9

 

Time Complexity: O(n1/2)

Auxiliary Space: O(1)



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads