Related Articles

# Find the GCD of N Fibonacci Numbers with given Indices

• Last Updated : 22 Apr, 2021

Given indices of N Fibonacci numbers. The task is to find the GCD of the Fibonacci numbers present at the given indices.
The first few Fibonacci numbers are:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89…

Note: The indices start from zero. That is, 0th Fibonacci number = 0.
Examples

```Input: Indices = {2, 3, 4, 5}
Output: GCD of the fibonacci numbers = 1

Input: Indices = {3, 6, 9}
Output: GCD of the fibonacci numbers = 2```

Brute force Approach: The brute force solution is to find all the Fibonacci numbers present at the given indices and compute the GCD of all of them, and print the result.
Efficient Approach: An efficient approach is to use the property:

`GCD(Fib(M), Fib(N)) = Fib(GCD(M, N))`

The idea is to calculate the GCD of all the indices and then find the Fibonacci number at the index gcd_1( where gcd_1 is the GCD of the given indices).
Below is the implementation of the above approach:

## C++

 `// C++ program to Find the GCD of N Fibonacci``// Numbers with given Indices``#include ``using` `namespace` `std;` `// Function to return n'th``// Fibonacci number``int` `getFib(``int` `n)``{``    ``/* Declare an array to store Fibonacci numbers. */``    ``int` `f[n + 2]; ``// 1 extra to handle case, n = 0``    ``int` `i;` `    ``// 0th and 1st number of the series``    ``// are 0 and 1``    ``f = 0;``    ``f = 1;` `    ``for` `(i = 2; i <= n; i++) {``        ``// Add the previous 2 numbers in the series``        ``// and store it``        ``f[i] = f[i - 1] + f[i - 2];``    ``}` `    ``return` `f[n];``}` `// Function to Find the GCD of N Fibonacci``// Numbers with given Indices``int` `find(``int` `arr[], ``int` `n)``{``    ``int` `gcd_1 = 0;``    ``// find the gcd of the indices``    ``for` `(``int` `i = 0; i < n; i++) {``        ``gcd_1 = __gcd(gcd_1, arr[i]);``    ``}` `    ``// find the fibonacci number at``    ``// index gcd_1``    ``return` `getFib(gcd_1);``}` `// Driver code``int` `main()``{``    ``int` `indices[] = { 3, 6, 9 };``    ``int` `N = ``sizeof``(indices) / ``sizeof``(``int``);` `    ``cout << find(indices, N);` `    ``return` `0;``}`

## Java

 `// Java program to Find the GCD of N Fibonacci``// Numbers with given Indices``import` `java.io.*;` `// Function to return n'th``// Fibonacci number` `public` `class` `GFG {``    ``// Recursive function to return gcd of a and b``    ``static` `int` `__gcd(``int` `a, ``int` `b)``    ``{``        ``// Everything divides 0``        ``if` `(a == ``0``)``        ``return` `b;``        ``if` `(b == ``0``)``        ``return` `a;``        ` `        ``// base case``        ``if` `(a == b)``            ``return` `a;``        ` `        ``// a is greater``        ``if` `(a > b)``            ``return` `__gcd(a-b, b);``        ``return` `__gcd(a, b-a);``    ``}` `static` `int` `getFib(``int` `n)``{``    ``/* Declare an array to store Fibonacci numbers. */``    ``int` `f[] = ``new` `int``[n + ``2``];``    ``// 1 extra to handle case, n = 0``    ``int` `i;` `    ``// 0th and 1st number of the series``    ``// are 0 and 1``    ``f[``0``] = ``0``;``    ``f[``1``] = ``1``;` `    ``for` `(i = ``2``; i <= n; i++) {``        ``// Add the previous 2 numbers in the series``        ``// and store it``        ``f[i] = f[i - ``1``] + f[i - ``2``];``    ``}` `    ``return` `f[n];``}` `// Function to Find the GCD of N Fibonacci``// Numbers with given Indices``static` `int` `find(``int` `arr[], ``int` `n)``{``    ``int` `gcd_1 = ``0``;``    ``// find the gcd of the indices``    ``for` `(``int` `i = ``0``; i < n; i++) {``        ``gcd_1 = __gcd(gcd_1, arr[i]);``    ``}` `    ``// find the fibonacci number at``    ``// index gcd_1``    ``return` `getFib(gcd_1);``}` `// Driver code``    ``public` `static` `void` `main (String[] args) {``        ``int` `indices[] = { ``3``, ``6``, ``9` `};``    ``int` `N = indices.length;` `    ``System.out.println( find(indices, N));``    ``}``}`

## Python 3

 `# Python program to Find the``# GCD of N Fibonacci Numbers``# with given Indices``from` `math ``import` `*` `# Function to return n'th``# Fibonacci number``def` `getFib(n) :` `    ``# Declare an array to store``    ``# Fibonacci numbers.``    ``f ``=` `[``0``] ``*` `(n ``+` `2``) ``# 1 extra to handle case, n = 0` `    ``# 0th and 1st number of the``    ``# series are 0 and 1``    ``f[``0``], f[``1``] ``=` `0``, ``1` `    ``# Add the previous 2 numbers``    ``# in the series and store it``    ``for` `i ``in` `range``(``2``, n ``+` `1``) :` `        ``f[i] ``=` `f[i ``-` `1``] ``+` `f[i ``-` `2``]` `    ``return` `f[n]` `# Function to Find the GCD of N Fibonacci``# Numbers with given Indices``def` `find(arr, n) :` `    ``gcd_1 ``=` `0` `    ``# find the gcd of the indices``    ``for` `i ``in` `range``(n) :``        ``gcd_1 ``=` `gcd(gcd_1, arr[i])` `    ``# find the fibonacci number``    ``# at index gcd_1``    ``return` `getFib(gcd_1)` `# Driver code    ``if` `__name__ ``=``=` `"__main__"` `:` `    ``indices ``=` `[``3``, ``6``, ``9``]``    ``N ``=` `len``(indices)` `    ``print``(find(indices, N))` `# This code is contributed by ANKITRAI1`

## C#

 `// C# program to Find the GCD``// of N Fibonacci Numbers with``// given Indices``using` `System;` `// Function to return n'th``// Fibonacci number``class` `GFG``{``// Recursive function to``// return gcd of a and b``static` `int` `__gcd(``int` `a, ``int` `b)``{``    ``// Everything divides 0``    ``if` `(a == 0)``    ``return` `b;``    ``if` `(b == 0)``    ``return` `a;``    ` `    ``// base case``    ``if` `(a == b)``        ``return` `a;``    ` `    ``// a is greater``    ``if` `(a > b)``        ``return` `__gcd(a - b, b);``    ``return` `__gcd(a, b - a);``}` `static` `int` `getFib(``int` `n)``{``    ``/* Declare an array to``    ``store Fibonacci numbers. */``    ``int` `[]f = ``new` `int``[n + 2];``    ` `    ``// 1 extra to handle case, n = 0``    ``int` `i;` `    ``// 0th and 1st number of``    ``// the series are 0 and 1``    ``f = 0;``    ``f = 1;` `    ``for` `(i = 2; i <= n; i++)``    ``{``        ``// Add the previous 2 numbers``        ``// in the series and store it``        ``f[i] = f[i - 1] + f[i - 2];``    ``}` `    ``return` `f[n];``}` `// Function to Find the GCD``// of N Fibonacci Numbers``// with given Indices``static` `int` `find(``int` `[]arr, ``int` `n)``{``    ``int` `gcd_1 = 0;``    ` `    ``// find the gcd of the indices``    ``for` `(``int` `i = 0; i < n; i++)``    ``{``        ``gcd_1 = __gcd(gcd_1, arr[i]);``    ``}` `    ``// find the fibonacci number``    ``// at index gcd_1``    ``return` `getFib(gcd_1);``}` `// Driver code``public` `static` `void` `Main ()``{``    ``int` `[]indices = { 3, 6, 9 };``    ``int` `N = indices.Length;` `    ``Console.WriteLine(find(indices, N));``}``}` `// This code is contributed``// by Shashank`

## PHP

 ``

## Javascript

 ``
Output:
`2`

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up