Skip to content

2183. Count Array Pairs Divisible by K

Description

Given a 0-indexed integer array nums of length n and an integer k, return the number of pairs (i, j) such that:

  • 0 <= i < j <= n - 1 and
  • nums[i] * nums[j] is divisible by k.

 

Example 1:

Input: nums = [1,2,3,4,5], k = 2
Output: 7
Explanation: 
The 7 pairs of indices whose corresponding products are divisible by 2 are
(0, 1), (0, 3), (1, 2), (1, 3), (1, 4), (2, 3), and (3, 4).
Their products are 2, 4, 6, 8, 10, 12, and 20 respectively.
Other pairs such as (0, 2) and (2, 4) have products 3 and 15 respectively, which are not divisible by 2.    

Example 2:

Input: nums = [1,2,3,4], k = 5
Output: 0
Explanation: There does not exist any pair of indices whose corresponding product is divisible by 5.

 

Constraints:

  • 1 <= nums.length <= 105
  • 1 <= nums[i], k <= 105

 

Solutions

Solution: Hash Map + Math

  • Time complexity: O(n√k)
  • Space complexity: O(n)

 

JavaScript

js
/**
 * @param {number[]} nums
 * @param {number} k
 * @return {number}
 */
const countPairs = function (nums, k) {
  const gcdMap = new Map();
  let result = 0;

  const gcd = (a, b) => (b ? gcd(b, a % b) : a);

  for (const num of nums) {
    const gcdA = gcd(num, k);

    for (const [gcdB, count] of gcdMap) {
      if ((gcdA * gcdB) % k === 0) {
        result += count;
      }
    }

    const count = gcdMap.get(gcdA) ?? 0;

    gcdMap.set(gcdA, count + 1);
  }

  return result;
};

Released under the MIT license