Given a number N, the task is to find the next Non-Fibonacci number.
Examples:
Input: N = 4
Output: 6
6 is the next non-fibonacci number after 4
Input: N = 6
Output: 7
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:
- If N <= 3, then the next Non-Fibonacci number will be 4
- 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
- If (N + 1) is a fibonacci number then (N + 2) will be the next Non-Fibonacci number.
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> |
4 6 9
Time Complexity: O(n1/2)
Auxiliary Space: O(1)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!