给定数字N,任务是评估以下表达式。预期时间复杂度为O(1)。
f(n-1)*f(n+1) - f(n)*f(n)
其中f(n)是n> = 1的第n个斐波那契数。前几个斐波那契数是0、1、1、2、3、5、8、13,….. ie(即,将0视为0th)斐波那契数)
例子 :
Input : n = 5
Output : -1
f(5-1=4) = 3
f(5+1=6) = 8
f(5)*f(5)= 5*5 = 25
f(4)*f(6)- f(5)*f(5)= 24-25= -1
尽管任务很简单,即找到第n-1,第n和第(n + 1)个斐波那契数。计算表达式并显示结果。但这可以在O(1)时间内使用卡西尼(Cassini)的身份完成,该身份表明:
f(n-1)*f(n+1) - f(n*n) = (-1)^n
因此,我们不需要计算任何斐波纳契项,只需检查n是否为偶数或奇数即可。
以上公式如何运作?
该公式基于斐波纳契数的矩阵表示形式。
C/C++
// C++ implementation to demonstrate working
// of Cassini’s Identity
#include
using namespace std;
// Returns (-1)^n
int cassini(int n)
{
return (n & 1) ? -1 : 1;
}
// Driver program
int main()
{
int n = 5;
cout << cassini(n);
return 0;
}
Java
// Java implementation to demonstrate working
// of Cassini’s Identity
class Gfg
{
// Returns (-1)^n
static int cassini(int n)
{
return (n & 1) != 0 ? -1 : 1;
}
// Driver method
public static void main(String args[])
{
int n = 5;
System.out.println(cassini(n));
}
}
Python3
# Python implementation
# to demonstrate working
# of Cassini’s Identity
# Returns (-1)^n
def cassini(n):
return -1 if (n & 1) else 1
# Driver program
n = 5
print(cassini(n))
# This code is contributed
# by Anant Agarwal.
C#
// C# implementation to demonstrate
// working of Cassini’s Identity
using System;
class GFG {
// Returns (-1) ^ n
static int cassini(int n)
{
return (n & 1) != 0 ? -1 : 1;
}
// Driver Code
public static void Main()
{
int n = 5;
Console.Write(cassini(n));
}
}
// This code is contributed by Nitin Mittal.
PHP
JavaScript
输出 :
-1
参考 :
https://zh.wikipedia.org/wiki/卡西尼_和_加泰罗尼亚语_身份