给定数字N ,任务是找到下一个非斐波那契数。
例子:
Input: N = 4
Output: 6
6 is the next non-fibonacci number after 4
Input: N = 6
Output: 7
方法:由于斐波那契数列为
0, 1, 1, 2, 3, 5, 8, 13, 21, 34….
可以观察到,不存在任何两个连续的斐波那契数。因此,为了找到下一个非斐波那契数,会出现以下情况:
- 如果N <= 3 ,则下一个非斐波那契数将是4
- 如果N> 3 ,那么我们将检查(N + 1)是否为斐波那契数。
- 如果(N + 1)是斐波那契数字,则(N + 2)将是下一个非斐波那契数字。
- 否则(N +1)将成为答案
下面是上述方法的实现:
C++
// C++ implementation of the approach
#include
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 Fibinacci Number
bool isFibonacci(int N)
{
// N is Fibinacci if either
// (5*N*N + 4), (5*N*N - 4) or both
// is a perferct square
return isPerfectSquare(5 * N * N + 4)
|| isPerfectSquare(5 * N * N - 4);
}
// Function to find
// the next Non-Fibinacci Number
int nextNonFibonacci(int N)
{
// Case 1
// If N<=3, then 4 will be
// next Non-Fibinacci Number
if (N <= 3)
return 4;
// Case 2
// If N+1 is Fibinacci, then N+2
// will be next Non-Fibinacci Number
if (isFibonacci(N + 1))
return N + 2;
// If N+1 is Non-Fibinacci, then N+2
// will be next Non-Fibinacci 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;
}
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 Fibinacci Number
static boolean isFibonacci(int N)
{
// N is Fibinacci if either
// (5*N*N + 4), (5*N*N - 4) or both
// is a perferct square
return isPerfectSquare(5 * N * N + 4)
|| isPerfectSquare(5 * N * N - 4);
}
// Function to find
// the next Non-Fibinacci Number
static int nextNonFibonacci(int N)
{
// Case 1
// If N<=3, then 4 will be
// next Non-Fibinacci Number
if (N <= 3)
return 4;
// Case 2
// If N+1 is Fibinacci, then N+2
// will be next Non-Fibinacci Number
if (isFibonacci(N + 1))
return N + 2;
// If N+1 is Non-Fibinacci, then N+2
// will be next Non-Fibinacci 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 Fibinacci Number
def isFibonacci(N):
# N is Fibinacci if either
# (5*N*N + 4), (5*N*N - 4) or both
# is a perferct square
return isPerfectSquare(5 * N * N + 4) or \
isPerfectSquare(5 * N * N - 4)
# Function to find
# the next Non-Fibinacci Number
def nextNonFibonacci(N):
# Case 1
# If N<=3, then 4 will be
# next Non-Fibinacci Number
if (N <= 3):
return 4
# Case 2
# If N+1 is Fibinacci, then N+2
# will be next Non-Fibinacci Number
if (isFibonacci(N + 1)):
return N + 2
# If N+1 is Non-Fibinacci, then N+2
# will be next Non-Fibinacci 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 Fibinacci Number
static bool isFibonacci(int N)
{
// N is Fibinacci if either
// (5*N*N + 4), (5*N*N - 4) or both
// is a perferct square
return isPerfectSquare(5 * N * N + 4)
|| isPerfectSquare(5 * N * N - 4);
}
// Function to find
// the next Non-Fibinacci Number
static int nextNonFibonacci(int N)
{
// Case 1
// If N<=3, then 4 will be
// next Non-Fibinacci Number
if (N <= 3)
return 4;
// Case 2
// If N+1 is Fibinacci, then N+2
// will be next Non-Fibinacci Number
if (isFibonacci(N + 1))
return N + 2;
// If N+1 is Non-Fibinacci, then N+2
// will be next Non-Fibinacci 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
输出:
4
6
9