Tuesday, 19 Oct 2021

# Sort an array in increasing order of GCD of their digits

Sort an array in increasing order of GCD of their digitsGiven an array arr[] consisting of N positive integers, the task is to sort the array arr[] according to the increasing order of GCD of digits of each element. If GCD of two or more elements are the same then, sort according to their values.Examples:Input: arr[] = {555, 363, 488, 244}Output: 244 363 488 555Explanation:Following the GCD of the digits of each number:555: GCD(5, 5, 5) = 5.363: GCD(3, 6, 3) = 3.488: GCD(4, 8, 8) = 4.244: GCD(2, 4, 4) = 2.After sorting according the given criteria, the order of elements are {244, 363, 488, 555}.Input: arr[] = {555, 363, 488, 244, 444, 5}Output: 244 363 444 488 5 555Approach: The given problem can be solved by using the comparator function with the sort() function. The comparator function is defined as:It takes two arguments at a time and returns true if the GCD of the first argument is less than the second argument.If the GCD value is the same, then it returns true if the first argument is less than the second argument. Otherwise, return false.Below is the implementation of the above approach:Python3  def gcd(a, b):            if not b:        return a                return gcd(b, a % b)  def keyFunc(n):    getGCD = int(str(n))              for i in str(n):        getGCD = gcd(getGCD, int(i))                  return getGCD  def sortArrayByGCD(arr):          arr.sort()              arr = sorted(arr, key = keyFunc)          print(*arr)        arr = [555, 363, 488, 244]sortArrayByGCD(arr)Output:
244 363 488 555
Time Complexity: O(N * log N)Auxiliary Space: O(1)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.