Welcome to Subscribe On Youtube
Formatted question description: https://leetcode.ca/all/2183.html
2183. Count Array Pairs Divisible by K (Hard)
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
andnums[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 <= 105
1 <= nums[i], k <= 105
Similar Questions:
Note
k
is as large as 1e5
. Going over it is slow. We should only go over k
’s divisors whose count is at most 128
.
83160 and 98280 have the greatest number of diviors, which is 128.
83160 = 11*7*5*3*3*3*2*2*2
98280 = 13*7*5*3*3*3*2*2*2
Maximum number of divisors of any n
-digit number. https://oeis.org/A066150
Solution 1.
Step 1. For each n
in A
, we only care the gcd(n, k)
part of it. So, we convert all n
to gcd(n, k)
.
Step 2. If n * m
is divisible by k
, then m
must be multiple of r = k / gcd(n, k)
. If we sum cnt[r], cnt[2r], cnt[3r]...
, it will get TLE.
It’s because some multiple d
of r
is not divisor of k
(gcd(d, k) != d
or k % d != 0
), so the count of the multiple is always 0
due to Step 1. We should only focus on those r
s that are divisors of k
.