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 - 1andnums[i] * nums[j]is divisible byk.
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 <= 1051 <= nums[i], k <= 105
Solutions
Solution 1
Thinking
Count pairs whose product is divisible by \(k\). \(n\le 10^5\) forbids a double loop. Whether \(a\cdot b\) is \(0\) modulo \(k\) depends only on \(\gcd(a,k)\) and \(\gcd(b,k)\) covering every prime power in \(k\).
Replace each value by \(\gcd(x,k)\), whose distinct values are the divisors of \(k\). After counting those gcds, enumerate divisor pairs \((a,b)\) whose product is a multiple of \(k\) and combine frequencies.
A hash map of gcd frequencies plus a double loop over divisors is enough. The code tabs are empty; this write-up follows that number-theoretic count.
1 | |
1 | |
1 | |
1 | |