title: Minimum Operations Make Gcd Array Multiple K
signature: minimumOperationsMakeGcdArrayMultipleK :: [Integer] -> Integer -> Integer -> Integer
  minimumOperationsMakeGcdArrayMultipleK a n k = 
test_code: import Text.Printf
  import Control.Exception (catch, SomeException)
  import Data.Typeable
  import qualified Data.List as List
  import qualified Data.Map as Map
  import qualified Data.Set as Set
  
  -- SOLUTION CODE
  -- ============================================
  
  PLACEHOLDER_CODE_BODY
  
  -- TESTING CODE 
  -- ============================================
  validateSolution :: Integer -> Integer -> Bool
  validateSolution actual expected = do
      actual == expected
  
  
  driver :: [Integer] -> Integer -> Integer -> Integer -> String
  driver a n k expected = do
      if (validateSolution (PLACEHOLDER_FN_NAME a n k) expected)
          then "PASSED"
      else "FAILED"
  
  main = do
      printf "TEST-0...%s\n" (driver ([3, 7, 27, 32, 36, 37, 44, 48, 50, 64, 86]) (5) (10) (19) )
  
      printf "TEST-1...%s\n" (driver ([-22, 6, -20, 60, -74, 98, 52, -22]) (5) (4) (130) )
  
      printf "TEST-2...%s\n" (driver ([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) (23) (29) (661) )
  
      printf "TEST-3...%s\n" (driver ([77, 11, 51, 11, 84, 79, 43, 12, 14, 50, 15, 6, 85, 32, 74, 49, 7, 2, 58]) (9) (17) (43) )
  
      printf "TEST-4...%s\n" (driver ([-90, -66, -64, -58, -46, -44, -32, -30, -30, -22, -18, -14, 12, 12, 18, 34, 44, 60, 70, 70, 74, 76, 86, 98, 98]) (12) (22) (778) )
  
      printf "TEST-5...%s\n" (driver ([1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1]) (36) (31) (1096) )
  
      printf "TEST-6...%s\n" (driver ([9, 22, 27, 27, 37, 53, 53, 56, 63, 73, 76, 81, 82]) (10) (11) (28) )
  
      printf "TEST-7...%s\n" (driver ([-46, 60, 80, 80, 42, -98, 30, -48, 4, -32, -78, 40, 52, 26, 88, 4, 22, 62, 88, -94, 2, 0, 58, 38, 52, -50, -52, 58, -62, 30, -38, -8, -82, -66]) (18) (19) (479) )
  
      printf "TEST-8...%s\n" (driver ([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) (19) (22) (413) )
  
      printf "TEST-9...%s\n" (driver ([42, 69, 93, 82, 8, 23, 73, 1, 77, 39, 49, 4, 95, 85]) (12) (13) (51) )
  
source_py: def minimum_operations_make_gcd_array_multiple_k(a, n, k):
      result = 0
      for i in range(n):
          if ((a[i] != 1) and (a[i] > k)):
              result = (result + min((a[i] % k), (k - (a[i] % k))))
          else:
              result = ((result + k) - a[i])
      return result
source_cpp: int minimum_operations_make_gcd_array_multiple_k(vector<int> a, int n, int k) {
    int result = 0;
    for ( int i = 0;
    i < n;
    ++ i ) {
      if ( a [ i ] != 1 && a [ i ] > k ) {
        result = result + min ( a [ i ] % k, k - a [ i ] % k );
      }
      else {
        result = result + k - a [ i ];
      }
    }
    return result;
  }