📜  查找两个斐波那契数的LCM的程序

📅  最后修改于: 2021-04-26 08:49:01             🧑  作者: Mango

这里给出两个正数ab 。任务是打印第a和第b个斐波那契数的最小公倍数

前几个斐波那契数是0、1、1、2、3、5、8、13、21、34、55、89、144,……

注意0被认为是第0 Fibonacci数。

例子:

Input : a = 3, b = 12
Output : 144

Input : a = 8, b = 37
Output : 507314157

方法:问题的简单解决方案是,

  1. 找到第一个斐波契数。
  2. 找到第b个斐波契数。
  3. 找到他们的GCD,并在GCD的帮助下找到他们的LCM。该关系为LCM(a,b)=(axb)/ GCD(a,b) (请在此处参考)。

下面是上述方法的实现:

C++
// C++ Program to find LCM of Fib(a)
// and Fib(b)
#include 
using namespace std;
const int MAX = 1000;
  
// Create an array for memoization
int f[MAX] = { 0 };
  
// Function to return the n'th Fibonacci
// number using table f[].
int fib(int n)
{
    // Base cases
    if (n == 0)
        return 0;
    if (n == 1 || n == 2)
        return (f[n] = 1);
  
    // If fib(n) is already computed
    if (f[n])
        return f[n];
  
    int k = (n & 1) ? (n + 1) / 2 : n / 2;
  
    // Applying recursive formula
    // Note value n&1 is 1
    // if n is odd, else 0.
    f[n] = (n & 1) ? (fib(k) * fib(k) + fib(k - 1) * fib(k - 1))
                   : (2 * fib(k - 1) + fib(k)) * fib(k);
  
    return f[n];
}
  
// Function to return gcd of a and b
int gcd(int a, int b)
{
    if (a == 0)
        return b;
  
    return gcd(b % a, a);
}
  
// Function to return the LCM of
// Fib(a) and Fib(a)
int findLCMFibonacci(int a, int b)
{
    return (fib(a) * fib(b)) / fib(gcd(a, b));
}
  
// Driver code
int main()
{
    int a = 3, b = 12;
  
    cout << findLCMFibonacci(a, b);
  
    return 0;
}


Java
// Java ram to find LCM of Fib(a)
// and Fib(b)
import java.util.*;
  
class GFG
{
  
static int MAX = 1000;
  
// Create an array for memoization
static int[] f = new int[MAX];
  
// Function to return the n'th Fibonacci
// number using table f[].
static int fib(int n)
{
    // Base cases
    if (n == 0)
        return 0;
    if (n == 1 || n == 2)
        return (f[n] = 1);
  
    // If fib(n) is already computed
    if (f[n] != 0)
        return f[n];
    int k = 0; 
    if ((n & 1) != 0)
        k = (n + 1) / 2;
    else
        k = n / 2;
  
    // Applying recursive formula
    // Note value n&1 is 1
    // if n is odd, else 0.
    if((n & 1 ) != 0)
        f[n] = (fib(k) * fib(k) + 
                fib(k - 1) * fib(k - 1));
    else
        f[n] = (2 * fib(k - 1) + 
                    fib(k)) * fib(k);
  
    return f[n];
}
  
// Function to return gcd of a and b
static int gcd(int a, int b)
{
    if (a == 0)
        return b;
  
    return gcd(b % a, a);
}
  
// Function to return the LCM of
// Fib(a) and Fib(a)
static int findLCMFibonacci(int a, int b)
{
    return (fib(a) * fib(b)) / fib(gcd(a, b));
}
  
// Driver code
public static void main(String args[])
{
    int a = 3, b = 12;
  
    System.out.println(findLCMFibonacci(a, b));
}
}
  
// This code is contributed by
// Surendra_Gangwar


Python3
# Python 3 Program to find LCM of 
# Fib(a) and Fib(b)
MAX = 1000
  
# Create an array for memoization
f = [0] * MAX
  
# Function to return the n'th 
# Fibonacci number using table f[].
def fib(n):
  
    # Base cases
    if (n == 0):
        return 0
    if (n == 1 or n == 2):
        f[n] = 1
        return f[n]
  
    # If fib(n) is already computed
    if (f[n]):
        return f[n]
  
    k = (n + 1) // 2 if (n & 1) else n // 2
  
    # Applying recursive formula
    # Note value n&1 is 1
    # if n is odd, else 0.
    if (n & 1):
        f[n] = (fib(k) * fib(k) + 
                fib(k - 1) * fib(k - 1))
    else:
        f[n] = (2 * fib(k - 1) + fib(k)) * fib(k)
  
    return f[n]
  
# Function to return gcd of a and b
def gcd(a, b):
    if (a == 0):
        return b
  
    return gcd(b % a, a)
  
# Function to return the LCM of
# Fib(a) and Fib(a)
def findLCMFibonacci(a, b):
  
    return (fib(a) * fib(b)) // fib(gcd(a, b))
  
# Driver code
if __name__ == "__main__":
    a = 3
    b = 12
  
    print (findLCMFibonacci(a, b))
  
# This code is contributed by ita_c


C#
// C# ram to find LCM of Fib(a)
// and Fib(b)
using System;
  
class GFG
{
  
static int MAX = 1000;
  
// Create an array for memoization
static int[] f = new int[MAX];
  
// Function to return the n'th Fibonacci
// number using table f[].
static int fib(int n)
{
    // Base cases
    if (n == 0)
        return 0;
    if (n == 1 || n == 2)
        return (f[n] = 1);
  
    // If fib(n) is already computed
    if (f[n] != 0)
        return f[n];
    int k = 0; 
    if ((n & 1) != 0)
        k = (n + 1) / 2;
    else
        k = n / 2;
  
    // Applying recursive formula
    // Note value n&1 is 1
    // if n is odd, else 0.
    if((n & 1 ) != 0)
        f[n] = (fib(k) * fib(k) + 
                fib(k - 1) * fib(k - 1));
    else
        f[n] = (2 * fib(k - 1) + 
                    fib(k)) * fib(k);
  
    return f[n];
}
  
// Function to return gcd of a and b
static int gcd(int a, int b)
{
    if (a == 0)
        return b;
  
    return gcd(b % a, a);
}
  
// Function to return the LCM of
// Fib(a) and Fib(a)
static int findLCMFibonacci(int a, int b)
{
    return (fib(a) * fib(b)) / fib(gcd(a, b));
}
  
// Driver code
static void Main()
{
    int a = 3, b = 12;
  
    Console.WriteLine(findLCMFibonacci(a, b));
}
}
  
// This code is contributed by mits


PHP


输出:
144