GCD of more than two (or array) numbers - GeeksforGeeks

28 Mar, 2022
Given an array of numbers, find GCD of the array elements. In a previous post we find GCD of two number.Examples: 
Input  : arr[] = {1, 2, 3}
Output : 1

Input  : arr[] = {2, 4, 6, 8}
Output : 2
The GCD of three or more numbers equals the product of the prime factors common to all the numbers, but it can also be calculated by repeatedly taking the GCDs of pairs of numbers.  
gcd(a, b, c) = gcd(a, gcd(b, c)) 
             = gcd(gcd(a, b), c) 
             = gcd(gcd(a, c), b)
For an array of elements, we do the following. We will also check for the result if the result at any step becomes 1 we will just return the 1 as gcd(1,x)=1.  
result = arr[0]
For i = 1 to n-1
   result = GCD(result, arr[i])
Below is the implementation of the above idea. 
C++
Java
Python
C#
PHP
Javascript
// C++ program to find GCD of two or// more numbers#include <bits/stdc++.h>using namespace std; // Function to return gcd of a and bint gcd(int a, int b){    if (a == 0)        return b;    return gcd(b % a, a);} // Function to find gcd of array of// numbersint findGCD(int arr[], int n){    int result = arr[0];    for (int i = 1; i < n; i++)    {        result = gcd(arr[i], result);         if(result == 1)        {           return 1;        }    }    return result;} // Driver codeint main(){    int arr[] = { 2, 4, 6, 8, 16 };    int n = sizeof(arr) / sizeof(arr[0]);    cout << findGCD(arr, n) << endl;    return 0;}
// Java program to find GCD of two or// more numbers public class GCD {    // 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 find gcd of array of    // numbers    static int findGCD(int arr[], int n)    {        int result = arr[0];        for (int element: arr){            result = gcd(result, element);             if(result == 1)            {               return 1;            }        }         return result;    }     public static void main(String[] args)    {        int arr[] = { 2, 4, 6, 8, 16 };        int n = arr.length;        System.out.println(findGCD(arr, n));    }} // This code is contributed by Saket Kumar
# GCD of more than two (or array) numbers # Function implements the Euclidean# algorithm to find H.C.F. of two numberdef find_gcd(x, y):         while(y):        x, y = y, x % y         return x         # Driver Code       l = [2, 4, 6, 8, 16] num1 = l[0]num2 = l[1]gcd = find_gcd(num1, num2) for i in range(2, len(l)):    gcd = find_gcd(gcd, l[i])     print(gcd) # Code contributed by Mohit Gupta_OMG
// C# program to find GCD of// two or more numbersusing System; public class GCD {         // 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 find gcd of    // array of numbers    static int findGCD(int[] arr, int n)    {        int result = arr[0];        for (int i = 1; i < n; i++){            result = gcd(arr[i], result);             if(result == 1)            {               return 1;            }        }         return result;    }         // Driver Code    public static void Main()    {        int[] arr = { 2, 4, 6, 8, 16 };        int n = arr.Length;        Console.Write(findGCD(arr, n));    }} // This code is contributed by nitin mittal
<?php// PHP program to find GCD of two or// more numbers // Function to return gcd of a and bfunction gcd( $a, $b){    if ($a == 0)        return $b;    return gcd($b % $a, $a);} // Function to find gcd of array of// numbersfunction findGCD($arr, $n){    $result = $arr[0];     for ($i = 1; $i < $n; $i++){        $result = gcd($arr[$i], $result);         if($result == 1)        {           return 1;        }    }    return $result;} // Driver code$arr = array( 2, 4, 6, 8, 16 );$n = sizeof($arr);echo (findGCD($arr, $n)); // This code is contributed by// Prasad Kshirsagar.?>
<script> // Javascript program to find GCD of two or// more numbers // Function to return gcd of a and bfunction gcd(a, b){    if (a == 0)        return b;    return gcd(b % a, a);} // Function to find gcd of array of// numbersfunction findGCD(arr, n){    let result = arr[0];    for (let i = 1; i < n; i++)    {        result = gcd(arr[i], result);         if(result == 1)        {        return 1;        }    }    return result;} // Driver code     let arr = [ 2, 4, 6, 8, 16 ];    let n = arr.length;    document.write(findGCD(arr, n) + "<br>"); // This is code is contributed by Mayank Tyagi </script>
Output:  
2
Time Complexity: O(N * log(N)), where N is the largest element of the arrayAuxiliary Space: O(1)
Recursive Method: Implementation of Algorithm recursively :
C++
Java
#include <bits/stdc++.h>using namespace std; // recursive implementationint GcdOfArray(vector<int>& arr, int idx){    if (idx == arr.size() - 1) {        return arr[idx];    }    int a = arr[idx];    int b = GcdOfArray(arr, idx + 1);    return __gcd(        a, b); // __gcd(a,b) is inbuilt library function} int main(){    vector<int> arr = { 1, 2, 3 };    cout << GcdOfArray(arr, 0) << "\n";     arr = { 2, 4, 6, 8 };    cout << GcdOfArray(arr, 0) << "\n";    return 0;}
import java.util.*;class GFG{       // Recursive function to return gcd of a and b     static int __gcd(int a, int b)     {         return b == 0? a:__gcd(b, a % b);        }   // recursive implementationstatic int GcdOfArray(int[] arr, int idx){    if (idx == arr.length - 1) {        return arr[idx];    }    int a = arr[idx];    int b = GcdOfArray(arr, idx + 1);    return __gcd(        a, b); // __gcd(a,b) is inbuilt library function} public static void main(String[] args){   int[] arr = { 1, 2, 3 };    System.out.print(GcdOfArray(arr, 0)+ "\n");     int[] arr1 = { 2, 4, 6, 8 };    System.out.print(GcdOfArray(arr1, 0)+ "\n");}} // This code is contributed by gauravrajput1
1
2
Time Complexity: O(N * log(N)), where N is the largest element of the array
Auxiliary Space: O(N)
This article is contributed by DANISH_RAZA . If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to review-team@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above. 
 
nitin mittal
Prasad_Kshirsagar
nkmishra1997
divyanshsinghxi
MohammadAli1
prakharbansal11
rrlinus
mayanktyagi1709
moneshsannareddy
GauravRajput1
joaquin144
sulthan309
simranarora5sos
Amazon
GCD-LCM
Nagarro
SAP Labs
Arrays
Mathematical
Amazon
SAP Labs
Nagarro
Arrays
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Multidimensional Arrays in Java
Introduction to Arrays
Python | Using 2D arrays/lists the right way
Linked List vs Array
Queue | Set 1 (Introduction and Array Implementation)
Program for Fibonacci numbers
Write a program to print all permutations of a given string
C++ Data Types
Set in C++ Standard Template Library (STL)
Coin Change | DP-7