这里给出两个正数a和b 。任务是打印第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
方法:问题的简单解决方案是,
- 找到第一个斐波那契数。
- 找到第b个斐波那契数。
- 找到他们的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