logo

GCD ir Fibonačio skaičiai

Išbandykite GfG praktikoje ' title= #practiceLinkDiv { display: none !important; }

Jums suteikiami du teigiami skaičiai M ir N. Užduotis yra atspausdinti didžiausias bendras daliklis M'th ir N'th Fibonačio skaičiai .
Pirmieji Fibonačio skaičiai yra 0 1 1 2 3 5 8 13 21 34 55 89 144... 
Atminkite, kad 0 laikomas 0'-uoju Fibonačio skaičiumi.
Pavyzdžiai:  
 

Input : M = 3 N = 6 Output : 2 Fib(3) = 2 Fib(6) = 8 GCD of above two numbers is 2 Input : M = 8 N = 12 Output : 3 Fib(8) = 21 Fib(12) = 144 GCD of above two numbers is 3


 

Rekomenduojama praktika GCD ir Fibonačio skaičiai Išbandykite!


A Paprastas Sprendimas yra atlikti toliau nurodytus veiksmus. 
1) Raskite M'-ąjį Fibonačio skaičių. 
2) Raskite N-ąjį Fibonačio skaičių. 
3) Grąžinkite dviejų skaičių GCD.
A Geresnis Sprendimas yra pagrįsta žemiau nurodyta tapatybe
 



  GCD(Fib(M) Fib(N)) = Fib(GCD(M N))   The above property holds because Fibonacci Numbers follow Divisibility Sequence i.e. if M divides N then Fib(M) also divides N. For example Fib(3) = 2 and every third third Fibonacci Number is even. Source :   Wiki  


Veiksmai yra šie: 
1) Raskite M ir N GCD. Tegul GCD yra g. 
2) Grąžinti Fib(g).
Žemiau pateikiami aukščiau pateiktos idėjos įgyvendinimai.
 

C++
// C++ Program to find GCD of Fib(M) and Fib(N) #include    using namespace std; const int MAX = 1000; // Create an array for memoization int f[MAX] = { 0 }; // Returns n'th Fibonacci number using table f[]. // Refer method 6 of below post for details. // https://www.geeksforgeeks.org/dsa/program-for-nth-fibonacci-number/ 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 M int N) {  if (M == 0)  return N;  return gcd(N % M M); } // Returns GCD of Fib(M) and Fib(N) int findGCDofFibMFibN(int M int N) {  return fib(gcd(M N)); } // Driver code int main() {  int M = 3 N = 12;  cout << findGCDofFibMFibN(M N);  return 0; } 
C
// C Program to find GCD of Fib(M) and Fib(N) #include  const int MAX = 1000; // Returns n'th Fibonacci number using table arr[]. // Refer method 6 of below post for details. // https://www.geeksforgeeks.org/dsa/program-for-nth-fibonacci-number/ int fib(int n) {  // Create an array for memoization  int arr[MAX];  for (int i = 0; i < MAX; i++)  arr[i] = 0;  // Base cases  if (n == 0)  return 0;  if (n == 1 || n == 2)  return (arr[n] = 1);  // If fib(n) is already computed  if (arr[n])  return arr[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.  arr[n]  = (n & 1)  ? (fib(k) * fib(k) + fib(k - 1) * fib(k - 1))  : (2 * fib(k - 1) + fib(k)) * fib(k);  return arr[n]; } // Function to return gcd of a and b int gcd(int M int N) {  if (M == 0)  return N;  return gcd(N % M M); } // Returns GCD of Fib(M) and Fib(N) int findGCDofFibMFibN(int M int N) {  return fib(gcd(M N)); } // Driver code int main() {  int M = 3 N = 12;  printf('%d' findGCDofFibMFibN(M N));  return 0; } // This code is contributed by Aditya Kumar (adityakumar129) 
Java
// Java Program to find GCD of Fib(M) and Fib(N) class gcdOfFibonacci {  static final int MAX = 1000;  static int[] f;  gcdOfFibonacci() // Constructor  {  // Create an array for memoization  f = new int[MAX];  }  // Returns n'th Fibonacci number using table f[].  // Refer method 6 of below post for details.  // https://www.geeksforgeeks.org/dsa/program-for-nth-fibonacci-number/  private 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 = ((n & 1)==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)==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  private static int gcd(int M int N)  {  if (M == 0)  return N;  return gcd(N%M M);  }  // This method returns GCD of Fib(M) and Fib(N)  static int findGCDofFibMFibN(int M int N)  {  return fib(gcd(M N));  }  // Driver method  public static void main(String[] args)  {  // Returns GCD of Fib(M) and Fib(N)  gcdOfFibonacci obj = new gcdOfFibonacci();  int M = 3 N = 12;  System.out.println(findGCDofFibMFibN(M N));  } } // This code is contributed by Pankaj Kumar 
Python3
# Python Program to find # GCD of Fib(M) and Fib(N) MAX = 1000 # Create an array for memoization f=[0 for i in range(MAX)] # Returns n'th Fibonacci # number using table f[].  # Refer method 6 of below # post for details. # https://www.geeksforgeeks.org/dsa/program-for-nth-fibonacci-number/ def fib(n): # Base cases if (n == 0): return 0 if (n == 1 or n == 2): f[n] = 1 # 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. f[n] = (fib(k)*fib(k) + fib(k-1)*fib(k-1)) if(n & 1) else ((2* fib(k-1) + fib(k))*fib(k)) return f[n] # Function to return # gcd of a and b def gcd(M N): if (M == 0): return N return gcd(N % M M) # Returns GCD of # Fib(M) and Fib(N) def findGCDofFibMFibN(M N): return fib(gcd(M N)) # Driver code M = 3 N = 12 print(findGCDofFibMFibN(M N)) # This code is contributed # by Anant Agarwal. 
C#
// C# Program to find GCD of  // Fib(M) and Fib(N) using System; class gcdOfFibonacci {    static int MAX = 1000;  static int []f;  // Constructor  gcdOfFibonacci()   {  // Create an array  // for memoization  f = new int[MAX];  }  // Returns n'th Fibonacci number  // using table f[]. Refer method   // 6 of below post for details.  // https://www.geeksforgeeks.org/dsa/program-for-nth-fibonacci-number/  private 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 = ((n & 1)==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) == 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  private static int gcd(int M int N)  {  if (M == 0)  return N;  return gcd(N%M M);  }  // This method returns GCD of  // Fib(M) and Fib(N)  static int findGCDofFibMFibN(int M int N)  {  return fib(gcd(M N));  }  // Driver method  public static void Main()  {  // Returns GCD of Fib(M) and Fib(N)  new gcdOfFibonacci();  int M = 3 N = 12;  Console.Write(findGCDofFibMFibN(M N));  } } // This code is contributed by nitin mittal. 
PHP
 // PHP Program to find // GCD of Fib(M) and Fib(N) $MAX = 1000; // Create an array for memoization $f = array_fill(0 $MAX 0); // Returns n'th Fibonacci number  // using table f[]. Refer method  // 6 of below post for details. function fib($n) { global $f; // Base cases if ($n == 0) return 0; if ($n == 1 or $n == 2) $f[$n] = 1; // If fib(n) is already computed if ($f[$n]) return $f[$n]; $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 function gcd($M $N) { if ($M == 0) return $N; return gcd($N % $M $M); } // Returns GCD of Fib(M) and Fib(N) function findGCDofFibMFibN($M $N) { return fib(gcd($M $N)); } // Driver code $M = 3; $N = 12; print(findGCDofFibMFibN($M $N)) // This code is contributed // by mits ?> 
JavaScript
<script>  // JavaScript Program to find GCD of Fib(M) and Fib(N)  const MAX = 1000;  // Create an array for memoization  var f = [...Array(MAX)];  f.fill(0);  // Returns n'th Fibonacci number using table f[].  // Refer method 6 of below post for details.  // https://www.geeksforgeeks.org/dsa/program-for-nth-fibonacci-number/  function fib(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];  var 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  function gcd(M N) {  if (M == 0) return N;  return gcd(N % M M);  }  // Returns GCD of Fib(M) and Fib(N)  function findGCDofFibMFibN(M N) {  return fib(gcd(M N));  }  // Driver code  var M = 3  N = 12;  document.write(findGCDofFibMFibN(M N));    // This code is contributed by rdtank.  </script> 

Išvestis:  
 

2