📜  卡西尼号的身份

📅  最后修改于: 2021-04-29 14:50:32             🧑  作者: Mango

给定数字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/卡西尼_和_加泰罗尼亚语_身份